RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#176 von aftpriv , 02.10.2014 15:05

Zitat von Lokmaster
Hi

Was passiert wen ich 1 Km mit dem Messwagen gefahrenn habe?



Hi Amin

dann fängst Du mit dem 2. Kilometer an

Gruß

Alf


Pickel-Bahner seit 1958 / K-Gleis + ZIMO-Decoder (MX633P22/MX645P22)
RocRail & RocNetNode jeweils auf RasPi
Email bezüglich MobaLedLib-Belange: LedLib@yahoo.com


aftpriv  
aftpriv
EuroCity (EC)
Beiträge: 1.279
Registriert am: 03.04.2012
Ort: MKK, Hessischer Spessart
Gleise K-Gleis und Selbsbau-Pickel-Gleis (DC-Gleis mit Mittelleiter ausrüsten)
Spurweite H0
Steuerung Rocrail + Rocnetnode auf Raspi
Stromart Digital


RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#177 von Lokmaster , 02.10.2014 17:45

Hi Alf

Mensch,da hätte ich auch selber drauf kommen können


Gruß
Armin

H0 mit Intellibox DCC
Roco,Piko,Lima.usw Loks sind viel zuviel und bei den Wagons ist es genauso


 
Lokmaster
EuroCity (EC)
Beiträge: 1.344
Registriert am: 26.06.2006
Ort: Bruchertseifen
Spurweite H0
Steuerung Intellibox Neo
Stromart Digital


RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#178 von V Friedrich , 11.10.2014 18:15

Hallo,

so, Messwagen die Zweite g



















Größere Bilder gibt es auf meiner HP

Gruß
Volker


 
V Friedrich
Metropolitan (MET)
Beiträge: 2.708
Registriert am: 01.11.2008
Homepage: Link
Gleise C-Gleis
Spurweite H0
Steuerung CS2, CS3 WDP2021
Stromart Digital


RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#179 von entchen , 12.10.2014 11:00

Guten Morgen

Die hier eingestellten Bilder gefallen mir alle sehr. Einen tollen Wagen hast du da gebastelt, Volker.

Nun zeige ich euch auch ein paar Bilder von meinem Wagen,den ich jetzt aufgebaut habe:




Außerdem habe ich dieses Wochenende ein neues Programm für den Atmel geschrieben. Dieses erfasst nun die Geschwindigkeiten viel genauer. Die Auflösung des Messwertes ist deutlich größer. Ferner reagiert die Anzeige der Geschwindigkeit jetzt fast ohne Verzögerung. Das ganze basiert auf die Implementierung eines langsamen Zählers. Da für die Messungen vergleichsweise nur wenige Impulse des Hallsensor ausgegeben werden, kann durch einfaches Zählen der Impulse nur eine geringe Auflösung erreicht werden.
Nun habe ich das Programm so gestaltet, dass im Hintergrund ein schnell laufender Counter im Atmel permanent hochzählt. Nach einer beliebig im Programm einstellbaren Anzahl an Radumdrehungen des Messwagens wird dieser Counter ausgelesen. Aus diesem Wert lässt sich durch Quotientenbildung mit der zurückgelegten Strecke (Anzahl der Radumdrehungen multipliziert mit dem Umfang) sehr dynamisch die Geschwindigkeit berechnen. Ferner habe ich alle wichtigen Parameter, die im Programm eingestellt werden können, als #define-Angabe aufgelistet, um so schnell und übersichtlich alle Einstellungen wiederzufinden. Um alle Funktionen zu realisieren, war es nötig, alle drei im Atmel verfügbaren Timer zu nutzen. Dabei übernimmt der Timer 2 des Atmels sogar zwei Funktionen: Das Multiplexen der Anzeige sowie die Berechnung der Fahrzeit.

Ebenfalls habe ich die Dokumentation entsprechend überarbeitet und dort noch ein paar Erläuterungen zu den #define-Angaben eingepflegt.

Hier das neue Programm:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
//Main.c Messwagen Programmversion 2.0
 
#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "routines.h"
uint32_t p=0;
 
ISR(TIMER2_OVF_vect)
{
task_segments();
p++;
if (p>2929) //1s
{
gettime();
p=0;
}
}
 

ISR (TIMER0_COMP_vect)
{
getpath();

unsigned char sreg;
sreg = SREG;
cli();
uint16_t impulse = TCNT1;
TCNT1=0;
SREG = sreg;

getspeed(impulse);
}
 
ISR (TIMER1_COMPA_vect)
{
getspeed(0);
}
 
int main(void)
{
init();
_delay_ms(1000); //start-up time
sei();
while(1)
{
getswitch();
}
}
 
 



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 

//routines.h Messwagen Programmversion 2.0
 
#define raddurchmesser 10.55
#define mittelradsensor 3
#define kalibrierungPTC 80
#define mittelPTC 500
#define nullstellung 30000
 

//Initialisierung ADC/Timer
void init( void );

//Initialisierung Timer0
void timer_enable0(void);

//Initialisierung Timer1
void timer_enable1(void);
 
//Initialisierung Timer2
void timer_enable2(void);
 
//Initialisierung ADC
void adc_init(void);
 
//Einlesen der Switches von Multidecoder
void getswitch(void);
 
//Berechnung Temperatur
int64_t gettemperature(void);
 
//Ausgabe Temperatur
void set_segments(int64_t val);
 
//Multiplexen der Anzeige
void task_segments(void);
 
//Berechnung Fahrstrecke
void getpath(void);
 
//Berechnung Gesschwindigkeit
void getspeed(uint16_t val);
 
//Berechnung Zeit
void gettime(void);
 
 



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
 

//routines.c Messwagen Programmversion 2.0
 
#include <avr/io.h>
#include <util/delay.h>
#include "routines.h"
 
uint8_t pos = 0;
uint16_t zeit=0;
double strecke=0;
double offset = raddurchmesser*0.0314*mittelradsensor;
float geschwindigkeit=0;
float offset2 = 3.14*raddurchmesser*mittelradsensor*5859.375;
uint16_t maxgeschwindigkeit=0;
int64_t temperatur =0;
uint8_t dimmer = 0;
 

uint8_t display[]= { 0, 0, 0, 0, 0};

const uint8_t segments[] = {0b01111011, 0b01010000, 0b00111101, 0b01110101, 0b01010110, 0b01100111, 0b01101111, 0b01010001, 0b01111111, 0b01110111, 0b11111011, 0b11010000, 0b10111101,0b11110101, 0b11010110, 0b11100111, 0b11101111, 0b11010001, 0b11111111, 0b11110111 };
 
void init(void)
{
DDRA=0x00;
DDRB=0b00000000;
DDRC=0xFF;
DDRD=0xFF;
 
timer_enable0();
timer_enable1();
timer_enable2();
adc_init();
}
 

void timer_enable0(void) // for multiplexing
{
TCCR2=2; //activate Timer0 with CPU-clock / 8
TCNT2=0; //reset counter value
TIMSK|=(1<<TOIE2); // Timer Overflow Interrupt enable
}
 

void timer_enable1(void)
{
TCCR1A = 0;
TCCR1B |= (1 << CS10) | (1 << CS12); //prescaler of 1024
TCNT1=0; //reset counter value
TIMSK|=(1<<OCIE1A); // Timer Overflow Interrupt enable
OCR1A=nullstellung;
}
 

void timer_enable2(void) // for counting Hallsensor
{
TCCR0 |= (1 << WGM01)| (1 << CS01)| (1 << CS02);// activate Counter at falling edge at TO pin, CTC mode
TIMSK |= (1 << OCIE0); // Enable CTC interrupt
OCR0 = mittelradsensor-1;
TCNT0=0; //reset counter value
}
 

void adc_init(void)
{
ADCSRA |= (1<<ADEN) | (1<<ADATE) | (1<<ADPS2) | (0<<ADPS1) | (1<<ADPS0) | (1<<ADSC);
ADMUX|= (1<<REFS0) | (0<<REFS1)| (0<<ADLAR) ; // AVcc Volt als Referenz
SFIOR|= (0<< ADTS2)| (0<<ADTS1)| (0<<ADTS0); // free running
ADMUX|= (0<<MUX0) | (0<<MUX1) | (0<<MUX2) | (0<<MUX3)| (0<<MUX4) ; // chose Port PA0 for ADC
}
 

void getswitch(void) // get switches from Multidecoder
{
uint8_t fxdecoder=PINA;
fxdecoder = fxdecoder & 0b00011110;
 
if (fxdecoder==0) // off
{
display[0]=0x00;
display[1]=0x00;
display[2]=0x00;
display[3]=0x00;
dimmer=1;
}
 
else if (fxdecoder==2) // Geschwindigkeit f1
{
float tempa = geschwindigkeit*3.132;
uint16_t temp=tempa;
uint8_t tausend = temp/1000;
uint8_t hundert = (temp%1000)/100;
uint8_t zehner = (temp%100)/10;
uint8_t einer = (temp%10);

display[0]=segments[einer];
display[1]=segments[zehner+10];
display[2]=segments[hundert];
display[3]=segments[tausend];
dimmer=1;
}
 
else if (fxdecoder==4) // Strecke f2
{
uint16_t streckeraw = strecke;
uint8_t hundert = streckeraw/1000;
uint8_t zehner = (streckeraw%1000)/100;
uint8_t einer = (streckeraw%100)/10;
uint8_t komma = (streckeraw%10);

display[0]=segments[komma];
display[1]=segments[einer+10];
display[2]=segments[zehner];
display[3]=segments[hundert];
dimmer=1;
}
 
else if (fxdecoder==8) // Fahrzeit f3
{
uint16_t minutenraw=zeit/60;
uint8_t stunden1 = (minutenraw/60);
uint8_t minuten2 = (minutenraw%60)/10;
uint8_t minuten1 = (minutenraw%10);

display[0]=segments[minuten1];
display[1]=segments[minuten2];
display[2]=segments[stunden1+10];
display[3]=0b00000000;
dimmer=1;
}
 

else if (fxdecoder==6) //Vmax f4
{
uint16_t temp = maxgeschwindigkeit*3.132;

uint8_t tausend = temp/1000;
uint8_t hundert = (temp%1000)/100;
uint8_t zehner = (temp%100)/10;
uint8_t einer = (temp%10);

display[0]=segments[einer];
display[1]=segments[zehner+10];
display[2]=segments[hundert];
display[3]=segments[tausend];
dimmer=1;
}
 

else if (fxdecoder==10) //Temperatur f1 + f2
{
dimmer=1;
set_segments(gettemperature());
}
 
else if (fxdecoder==14) // RESET f1 + f2 + f3+ f4
{
zeit=0;
strecke=0;
geschwindigkeit=0;
maxgeschwindigkeit=0;
 
display[0]=0b00000100;
display[1]=0b00000100;
display[2]=0b00000100;
display[3]=0b00000100;
dimmer=1;
}
 
else if (fxdecoder==16) // off
{
display[0]=0x00;
display[1]=0x00;
display[2]=0x00;
display[3]=0x00;
dimmer=2;
}
 
else if (fxdecoder==18) // Geschwindigkeit f1
{
float tempa = geschwindigkeit*3.132; //9/2500*87*10
uint16_t temp=tempa;

uint8_t tausend = temp/1000;
uint8_t hundert = (temp%1000)/100;
uint8_t zehner = (temp%100)/10;
uint8_t einer = (temp%10);

display[0]=segments[einer];
display[1]=segments[zehner+10];
display[2]=segments[hundert];
display[3]=segments[tausend];
dimmer=2;
}
 
else if (fxdecoder==20) // Strecke f2
{
uint16_t streckeraw = strecke;
uint8_t hundert = streckeraw/1000;
uint8_t zehner = (streckeraw%1000)/100;
uint8_t einer = (streckeraw%100)/10;
uint8_t komma = (streckeraw%10);

display[0]=segments[komma];
display[1]=segments[einer+10];
display[2]=segments[zehner];
display[3]=segments[hundert];
dimmer=2;
}
 
else if (fxdecoder==24) // Fahrzeit f3
{
uint16_t minutenraw=zeit/60;
uint8_t stunden1 = (minutenraw/60);
uint8_t minuten2 = (minutenraw%60)/10;
uint8_t minuten1 = (minutenraw%10);

display[0]=segments[minuten1];
display[1]=segments[minuten2];
display[2]=segments[stunden1+10];
display[3]=0b00000000;
dimmer=2;
}
 

else if (fxdecoder==22) //Vmax f4
{
uint16_t temp = maxgeschwindigkeit*3.132;

uint8_t tausend = temp/1000;
uint8_t hundert = (temp%1000)/100;
uint8_t zehner = (temp%100)/10;
uint8_t einer = (temp%10);

display[0]=segments[einer];
display[1]=segments[zehner+10];
display[2]=segments[hundert];
display[3]=segments[tausend];
dimmer=2;
}
 

else if (fxdecoder==26) //Temperatur f1 + f2
{
dimmer=2;
set_segments(gettemperature());
}
 
else if (fxdecoder==30) // RESET f1 + f2 + f3+ f4
{
zeit=0;
strecke=0;
geschwindigkeit=0;
maxgeschwindigkeit=0;
 
display[0]=0b00000100;
display[1]=0b00000100;
display[2]=0b00000100;
display[3]=0b00000100;
dimmer=2;
}
 
else
{
// display error
display[0]=0b00000000;
display[1]=0b00001100;
display[2]=0b00001100;
display[3]=0b00101111;
}

}
 

int64_t gettemperature(void)
{
int64_t temperaturadc =0;
float hilf =0;
int16_t i;
int64_t temp1=0;
int64_t temp2=0;
int64_t temp3=0;
 
for(i = 0; i<mittelPTC ; i++)
{
temperaturadc +=ADC;
_delay_ms(5);
}
temperaturadc=(temperaturadc*10)/mittelPTC;
hilf = (temperaturadc*4.8828125)/(50000-(temperaturadc*4.8828125)); //Umrechnung Messspannung am Spannungsteiler
 
temp1=hilf*hilf*hilf*2854;
temp2=hilf*hilf*15850;
temp3=hilf*47480;
 
temperatur=temp1-temp2+temp3-31985; // Kennlinie des PTC
temperatur+=kalibrierungPTC;//Kalibrierung des PTC
return temperatur;
}
 

void task_segments(void)
{
switch(pos)
{
case 0: PORTD=display[4]; PORTC &= ~(1<<PC2); if(dimmer!=1){_delay_us(1750);}else{_delay_ms(1);}; PORTC |= (1<<PC0); PORTD=display[pos]; pos++; break;
case 1: PORTD=display[4]; PORTC &= ~(1<<PC0); if(dimmer!=1){_delay_us(1750);}else{_delay_ms(1);}; PORTC |= (1<<PC1); PORTD=display[pos]; pos++; break;
case 2: PORTD=display[4]; PORTC &= ~(1<<PC1); if(dimmer!=1){_delay_us(1750);}else{_delay_ms(1);}; PORTC |= (1<<PC3); PORTD=display[pos]; pos++; break;
case 3: PORTD=display[4]; PORTC &= ~(1<<PC3); if(dimmer!=1){_delay_us(1750);}else{_delay_ms(1);}; PORTC |= (1<<PC2); PORTD=display[pos]; pos=0; break;
}
}
 

void set_segments(int64_t val)
{

if(val<(-9999)) // return Error E1
{
display[0]=0b00000000;
display[1]=0b00000000;
display[3]=0b00101111;
display[2]=0b01010000;
return;
}
 

if(val>9999) // return Error E2
{
display[0]=0b00000000;
display[1]=0b00000000;
display[3]=0b00101111;
display[2]=0b00111101;
return;
}
 
// Ausgabe Temperatur
 
if(val>=0)
{
uint8_t tausend = (val%10000)*0.001;
uint8_t hundert = (val%1000)*0.01;
uint8_t zehner = (val%100)*0.1;
 
if(tausend==0)
{
display[2]=0b00000000;
}
 
else
{
display[2]=segments[tausend];
}
 
display[1]=segments[hundert+10];
display[0]=segments[zehner];
display[3]=0b00000000;
}
 
if(val<0)
{
val=-val;
uint8_t hundert = (val%1000)*0.01;
uint8_t zehner = (val%100)*0.1;
display[2]=0b00100000; // minus
display[1]=segments[hundert+10];
display[0]=segments[zehner];
display[3]=0b00000000;
}
}
 
void getpath(void)
{
strecke= strecke+offset;
}
 
void getspeed(uint16_t val)
{
if (val!=0)
{
geschwindigkeit=(offset2)/val;
}
else
{
geschwindigkeit=0;
}

if (geschwindigkeit>maxgeschwindigkeit)
{
maxgeschwindigkeit=geschwindigkeit;
}
}
 
void gettime(void)
{
zeit++;
}
 
 


Einen schönen Sonntag,
Oliver


Bastelprojekt mit Mikrokontroller - Bluetooth Verbindung: Selbstbau HO Messwagen mit Atmega16


 
entchen
InterRegioExpress (IRE)
Beiträge: 455
Registriert am: 19.01.2011


RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#180 von ozul ( gelöscht ) , 13.10.2014 00:43

Hallo,

ich möchte auch einmal meinen Messwagen vorstellen.



Noch einmal vielen Dank für die Entwicklung des Messwagens.

Ist es möglich, eine zweite Anzeige für die andere Wagenseite einzubinden? Geht das einfach mit einer Zweiten Platine, die ich in das Flachbandkabel einklinke?

Gruß
Olaf


ozul

RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#181 von V Friedrich , 13.10.2014 04:48

Zitat von ozul
Hallo,

ich möchte auch einmal meinen Messwagen vorstellen.



Noch einmal vielen Dank für die Entwicklung des Messwagens.

Ist es möglich, eine zweite Anzeige für die andere Wagenseite einzubinden? Geht das einfach mit einer Zweiten Platine, die ich in das Flachbandkabel einklinke?

Gruß
Olaf



Hallo Olaf,

das habe ich mich auch schon gefragt, aber das wird leider bei meinen beiden Wagen nicht passen und somit habe ich den Gedanken verworfen.

Gruß
Volker


 
V Friedrich
Metropolitan (MET)
Beiträge: 2.708
Registriert am: 01.11.2008
Homepage: Link
Gleise C-Gleis
Spurweite H0
Steuerung CS2, CS3 WDP2021
Stromart Digital


RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#182 von entchen , 13.10.2014 09:37

Guten morgen,

theoretisch ist es möglich, eine zweite Anzeigeplatine einzubauen. Wie Olaf schon richtig gesagt hat, kann dies durch einfaches Anklinken an das Flachbandkabel geschehen.

Soweit die Theorie. in der Praxis ist es aber so, dass der Strom, der dann aus dem Atmel herausfließt, ca. im Bereich der absolute maximum ratings liegt. Ich habe den Stromfluss jetzt noch nicht gemessen, der momentan durch eine Anzeigeplatine fließt. Geschätzt würde ich mal so auf ca. 20mA pro Pin tippen.
Auf jeden Fall sollten dann die Widerstände zu den 7 Segmentanzeigen auf der Anzeigeplatine erhöht werden. Ich werde mal den Strom an meinem Messwagen mit einem Multimeter messen und diesen Wert hier veröfffentlichen.

Gruß
Oliver

PS: Ich hätte sogar noch eine einzelne Anzeigeplatine übrig, da ich bei einen Platinensatz nur die Steuerplatine benötigt habe.


Bastelprojekt mit Mikrokontroller - Bluetooth Verbindung: Selbstbau HO Messwagen mit Atmega16


 
entchen
InterRegioExpress (IRE)
Beiträge: 455
Registriert am: 19.01.2011


RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#183 von V Friedrich , 17.10.2014 22:13

Hallo,

ich habe jetzt auch einen Programmer bekommen und nach anfänglichen Schwierigkeiten habe ich jetzt mit Olivers Unterstützung und einigem hin und her die neue SW programmiert bekommen. Vielen Dank noch mal Oliver für die Hilfe.
Was mich so einiges an Zeit gekostet hatte, es kam immer wenn ich auf Apply ging eine Fehlermeldung (siehe Bild) und ich dachte der Programmer wird nicht erkannt. Bis ich dann mit einem Bekannten drauf kam den Wagen mal zusätzlich aufs Gleis zu stellen und siehe da, es klappte dann.

Aber jetzt zur neuen SW. Die gefällt mir viel besser, die Geschwindigkeitsanzeige ist jetzt um ein vielfaches schneller.

Mal sehen, vielleicht versehe ich meinen Wagen mit 4 Magneten und passe die SW dem entsprechend an. Aber wie : ops:



Gruß
Volker


 
V Friedrich
Metropolitan (MET)
Beiträge: 2.708
Registriert am: 01.11.2008
Homepage: Link
Gleise C-Gleis
Spurweite H0
Steuerung CS2, CS3 WDP2021
Stromart Digital


RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#184 von ozul ( gelöscht ) , 17.10.2014 23:31

Hallo,

an einer kleinen Anleitung, wie ich aus den drei Textdateien ein Programm bekomme, das ich auf den Chip flashen kann, wäre ich auch interessiert.

Viele Grüße
Olaf


ozul

RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#185 von DeMorpheus , 18.10.2014 18:28

Zitat von ozul
an einer kleinen Anleitung, wie ich aus den drei Textdateien ein Programm bekomme, das ich auf den Chip flashen kann, wäre ich auch interessiert.

Die Anleitung kannst du kriegen, schwierig ist das nicht. Aber ... hast du auch den benötigten Programmer? Ohne kannst du mit dem Programm nichts anfangen, und mit solltest du das eigentlich schon können


Viele Grüße,
Moritz

'Nitwit! Blubber! Oddment! Tweak!'


 
DeMorpheus
Metropolitan (MET)
Beiträge: 3.729
Registriert am: 22.12.2010
Spurweite H0
Stromart Digital


RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#186 von ozul ( gelöscht ) , 18.10.2014 20:03

Hallo Moritz,

vielen Dank für Deine Antwort.

Den Programmer habe ich schon bestellt. Nun brauche ich nur noch die Anleitung, wie ich das Programm aus den drei Dateien mit Atmel Studio auf den Chip bekomme.

Viele Grüße
Olaf


ozul

RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#187 von entchen , 18.10.2014 20:28

Guten Abend

Hier die Anleitung zum Programmieren des Atmels unter AVRStudio.


Zu aller erst muss der Programmer einmal in Atmel Studio eingebunden werden. Dafür den Programmer an den PC anschließen. Dann unter Tools -> Add Target den neuen Programmer hinzufügen. STK500 sollte dort im Feld stehen bleiben. Oft muss der Treiber des Programmers noch installiert werden. Ob der Treiber richtig installiert ist, kann unter Windows im Gerätemanager unter "COM & LTP" nachgeschaut werden.

Nun zum eigentlichen Programm. Dieses besteht aus drei Dateien, der Hauptdatei (main.c) sowie einer externen C-Datei (routines.c) und der dazugehörigen Headerdatei (routines.h).

Zum Einrichten des Programms muss ein neues Projekt angelegt werden. Dazu im Einstiegsfenster auf New Project gehen. Im aufpoppenden Fenster AVRGCC C Executable Project auswählen und abspeichern. Dann muss der richtige µC ausgewählt werden. Hier ist der ATmega16A auszuwählen.
Nun erscheint das Programmierfenster. In diesem Fenster den Quellcode der main.c einfügen.
Es fehlen noch die Dateien routines.c und routines.h im Projekt. Dazu im Projektmappen-Explorer (rechte Seite im Fenster) mit Rechtsklick auf das Projekt -> Hinzufügen -> Neues Element hinzufügen. Dann einmal C File auswählen. Das ist die routines.c Datei. Analog muss für die routines.h Datei Include File ausgewählt werden. Auch in diese zwei neuen Dateien den Quellcode kopieren. Dann das Projekt abspeichern.
Mit F7 wird das gesamte Projekt kompiliert und das HEX-File für den Atmel erzeugt.
Um nun den Atmel zu programmieren, muss der Programmer mit der Platine verbunden werden. Dann in Atmel Studio Tools -> Device Programming aufrufen. So gelangt man in das Programmierfenster.
Unter Tool den Programmer auswählen, unter Device muss ATmega16A stehen. In dem Register Memories am linken Rand wird das generierte HEX-File ausgewählt. Dann auf Program klicken und der Atmel wird programmiert
Um die Fusebits zu programmieren, geht man auf das Register Fuses. Hier werden sofort die aktuellen Fusebits deines Atmels angezeigt. Normalerweise sollte das Fusebit JTAGEN schon deaktiviert sein. Die Fusebits für die externe Taktquelle sollten ebenfalls schon eingestellt sein. Zum Überprüfen und ggf. Einstellen wieder das Programmierfenster aufrufen. Dann das Register Fuses aufrufen. In dem Fenster erscheinen wie gehabt alle möglichen Fusebits. In dieser Liste zum letzten Punkt scrollen. Gesucht ist SUT_CKSEL. In dieser Liste muss EXTMEDFXTALRES _16KCK_4MS auswählt werden. Dieser Befehl definiert einen Quarz als externe Taktquelle. Zum Einschwingen sind 16 Taktzyklen bestimmt, mit einer Verzögerung von 4 ms.

Das war soweit eine schnelle Übersicht zur Programmierung.

Gruß
Oliver


Bastelprojekt mit Mikrokontroller - Bluetooth Verbindung: Selbstbau HO Messwagen mit Atmega16


 
entchen
InterRegioExpress (IRE)
Beiträge: 455
Registriert am: 19.01.2011


RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#188 von ozul ( gelöscht ) , 19.10.2014 09:35

Hallo Oliver,

vielen Dank für die Anleitung.

Wenn ich den Programmer habe, berichte ich über den Erfolg oder Misserfolg.

Einen schönen Sonntag wünscht
Olaf


ozul

RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#189 von sbetamax , 19.10.2014 22:35

Hallo Oliver,
danke für die Anleitung!
Ich hab eine GALEP III Prgrammer. Mal sehn ob sich der Oldtimer auch einbinden lässt. Einen Wagen hab ich nun auch.


Gruß Stephan
Modellbahn ist nur ein Teil meiner Hobbys
Technisches
Zentrale: 6021, MS1, MS2, CS1 60212 und CS2 60214 (HW4.33) mit Mainstation, das ganze auf dem Teppich mit mfx. Oder mit dem ZX81 in MM1.


 
sbetamax
EuroCity (EC)
Beiträge: 1.329
Registriert am: 26.11.2005
Homepage: Link
Spurweite H0
Stromart AC, Digital


RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#190 von ozul ( gelöscht ) , 28.10.2014 14:52

Hallo,

der Programmer ist angekommen. Die Schnittstellen habe ich schon angelötet.

Nun habe ich noch eine Frage. Muss der Messwagen zum Programmieren auf dem Gleis stehen und von dort seine Spannungsversorgung bekommen oder kann ich auch die Spannungsversorgung des Programmers mit 5V benutzen?

Gruß
Olaf


ozul

RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#191 von entchen , 28.10.2014 17:13

Hallo Olaf,

du kannst die Spannungsversorgung von 5V aus dem Programmer benutzen. Das hat bei mir auch immer prima funktioniert. Der Messwagen benötigt deutlich weniger Strom als der USB Port maximal (ich glaub 500mA waren das : ) liefern kann.

Gruß
Oliver


Bastelprojekt mit Mikrokontroller - Bluetooth Verbindung: Selbstbau HO Messwagen mit Atmega16


 
entchen
InterRegioExpress (IRE)
Beiträge: 455
Registriert am: 19.01.2011


RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#192 von ozul ( gelöscht ) , 28.10.2014 18:03

Hallo Oliver,

vielen Dank für die schnelle Antwort.

Gruß
Olaf


ozul

RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#193 von ozul ( gelöscht ) , 16.11.2014 16:04

Hallo,

heute bin ich endlich dazu gekommen, das neue Programm auf den Atmel zu schreiben.

Ich dachte eigentlich, dass das kein Problem darstellen sollte. Irgendwie bekomme ich keine Verbindung zumISP-AVR Programmer. Egal ob die Messwagen Platine verbunden ist oder nicht, ich bekomme immer folgenden Fehler:

Unable to connect to tool STK500 (COM3)
Timestamp: 2014-11-16 15:55:28.471
Severity: ERROR
ComponentId: 20000
StatusCode: 0

Failed to set-up tool (no context id returned).

Liegt es daran, dass keine Verbindung zum ATmega aufgebaut werden kann oder ist der Programmer defekt.

Es leuchtet auch nur die grüne LED des Programmers. Die gelbe LED leuchtet bei einem Verbindungsversuch nicht auf.

Die Spannungsversorgung funktioniert. Die Messwagenanzeige leuchtet.

Vielleicht könnte mir jemand einen Rat geben.

Mit freundlichen Grüßen
Olaf


ozul

RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#194 von entchen , 16.11.2014 16:32

Hallo Olaf,

du benutzt AVR Studio, richtig?

Das hört sich sehr stark nach einem Problem des Programmers selbst bzw. einem Kommunikationsproblem zwischen Programmer und AVR-Studio an. Ist der Programmer auch vorher in AVR-Studio eingebunden worden?
Manchmal hakt es bei mir auch, dann gehe ich wie folgt vor:
AVR-Studio öffnen, dann den Programmer an den PC und den Messwagen anschließen. Erst jetzt das Programmierfenster in AVR-Studio öffnen. Jetzt sollte der Programmer gefunden worden sein. Falls nicht: Schaue mal bei eingestecktem Programmer unter Windows in den Gerätemanager. Hier sollte der Programmer unter "COM & LTP" aufgelistet sein.


Gruß
Oliver


Bastelprojekt mit Mikrokontroller - Bluetooth Verbindung: Selbstbau HO Messwagen mit Atmega16


 
entchen
InterRegioExpress (IRE)
Beiträge: 455
Registriert am: 19.01.2011


RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#195 von ozul ( gelöscht ) , 17.11.2014 02:25

Hallo Oliver,

ich habe den Fehler gefunden. Es waren fehlende USB-Treiber des Avr Studios. Wieso diese nicht mitinstalliert wurden, weiss ich nicht. Nachden ich diese nachinstalliert hatte, konnte ich auf den Programmer zugreifen.
Zu mehr hatte ich um diese Zeit keine Lust.

Ich melde mich nach hoffentlich erfolgreichen Flashen wieder.

Gruß
Olaf


ozul

RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#196 von Lokmaster , 22.11.2014 19:53

Hi

Wieviele Messwagen sind denn bis jetzt entstanden?


Gruß
Armin

H0 mit Intellibox DCC
Roco,Piko,Lima.usw Loks sind viel zuviel und bei den Wagons ist es genauso


 
Lokmaster
EuroCity (EC)
Beiträge: 1.344
Registriert am: 26.06.2006
Ort: Bruchertseifen
Spurweite H0
Steuerung Intellibox Neo
Stromart Digital


RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#197 von entchen , 22.11.2014 20:00

Hi,

ich habe insgesamt 30 Platinensätze bestellt. 28 davon sind hier im Forum verkauft worden; 2 habe ich behalten.

Gruß
Oliver


Bastelprojekt mit Mikrokontroller - Bluetooth Verbindung: Selbstbau HO Messwagen mit Atmega16


 
entchen
InterRegioExpress (IRE)
Beiträge: 455
Registriert am: 19.01.2011


RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#198 von hansi057 , 22.11.2014 22:06

Einen habe ich bekommen und leider nicht richtig zusammengelötet.
Über PN habe ich mit Oliver Kontakt aufgenommen und nach vergeblichen
reparaturversuchen hat Oliver das dann für mich in Ordnung gebracht.
Dafür ganz Herzlichen Dank nach Aachen.


Freundliche Grüße
Hansi


 
hansi057
InterCity (IC)
Beiträge: 881
Registriert am: 09.01.2010
Ort: bei Peine
Gleise C- Gleis
Spurweite H0
Steuerung CS 2 iTrain
Stromart Digital


RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#199 von Lokmaster , 23.11.2014 10:04

Hi

Also meiner hat sofort funktioniert.


Gruß
Armin

H0 mit Intellibox DCC
Roco,Piko,Lima.usw Loks sind viel zuviel und bei den Wagons ist es genauso


 
Lokmaster
EuroCity (EC)
Beiträge: 1.344
Registriert am: 26.06.2006
Ort: Bruchertseifen
Spurweite H0
Steuerung Intellibox Neo
Stromart Digital


RE: Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder

#200 von Elch , 24.11.2014 13:57

Und ich kam noch nicht dazu meinen einzubauen. Das echte Leben hat es verhindert.
Aber kommt Zeit kommt Einbau (wahrscheinlich um die Weihnachtszeit).


Gruß

Florian

Mein Projekt Traudelsheim


Elch  
Elch
InterCity (IC)
Beiträge: 918
Registriert am: 27.08.2012
Spurweite H0
Steuerung CU 6021
Stromart AC, Digital


   

Ersatz für Relais
Problem bei Programmierung von Lok Sound 5

  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
Xobor Einfach ein eigenes Forum erstellen
Datenschutz