Hallo zussamen,
nachdem ich mir ein C-Buch zugelegt habe und das Forum bzw. Codesammlung
quasi auswendig gelernt habe stehe ich vor einem riesen Problem...
folgendes:
Ich baue gerade ein kleines Netzteil. Hardware funktioniert, Die meisten
Module des C-Programms auch.
Das Problem ist, ich wollte mit einem NE555 einen Takt generieren, der
ca alle 500ms das Display aktualisiert (TIMER sind leider keiner mehr
übrig.) Soll heißen alle Zahlenwerte löschen,
Werte neu berechnen und wieder auf dem LCD anzeigen.
Solange ich das Display mit einem Taster am INT0 Eingang (10kOhm
Pulldown)
auslöse Funktioniert es auch wenn ich aber den NE555 stecke, hängt sich
nach einer nicht definierbaren anzahl von INT0 Aufrufen irgendwas auf.
Das Display wird nicht mehr aktualisiert, wenige sekunden Später fängt
der µC von vorne im Programm an (schätze mal der Watchdog greift dort
ein)..
Hat vllt irgendwer eine zündende Idee?
Vielen Dank im Vorraus
Matthias
PS:hier erstmal einige Codeauschnitte ( Im Anhang ist die Komplette
Quelldatei die ist viel zu lang)
1 | int main(void)
|
2 |
|
3 | {
|
4 | GICR=(1<<INT0); //INT0 config
|
5 | MCUCR=(1<<ISC01); //INT0 config
|
6 | sei(); //freigabe interrupts
|
7 |
|
8 |
|
9 | while(1)
|
10 | {
|
11 | asm("NOP");//Mache nichts in der Haupschleife;
|
12 | asm("NOP");//Verbrenn nur Zeit und warte auf Interrupts!
|
13 | }
|
14 | return 0;
|
15 | }
|
16 |
|
17 | ISR(INT0_vect)
|
18 | {
|
19 |
|
20 | //dtostrf() wird zwar vergewaltigt,
|
21 | //weil sie nicht mit String gefüttert wird
|
22 | //funktion trotzdem gegeben!
|
23 |
|
24 | //Display Aktualisieren mit NE555
|
25 | //Rechteckgeber 5HZ Signal Duty-cycle ca 5%
|
26 | analog_IL=0;
|
27 | analog_IH=0;
|
28 | analog_U=0;
|
29 | analog_T=0;
|
30 | analog_IL=adc_read10bit(0,2);
|
31 | analog_IH=adc_read10bit(1,2);
|
32 | analog_U=adc_read10bit(2,2);
|
33 | analog_T=adc_read10bit(3,2);
|
34 |
|
35 | calc_U=analog_U*adc_10;
|
36 | lcd_gotoxy(3,1);
|
37 | lcd_puts(" ");
|
38 | if(analog_U==1023)
|
39 | {
|
40 | dtostrf( calc_U, 3, 1, s );
|
41 | }
|
42 | else
|
43 | {
|
44 | dtostrf( calc_U, 3, 2, s );
|
45 | }
|
46 | lcd_gotoxy(3,1);
|
47 | lcd_puts(s);
|
48 | lcd_puts("V");
|
49 | .
|
50 | .
|
51 | .
|
52 | .
|
53 | }
|