Liebe User, Ich hoffe, dass mir da jemand helfen kann. Ich benutze die Sisy-Software. Mit dem Code Wizard habe ich entsprechende Analogfunktion (Analog Wandler, Eingang C1) generiert. Ich habe ein einfaches Programm zum Steuern von ATmega 328p in C geschrieben. Dass Programm sollte im Unterprogramm in Abhängigkeit das analogen Eingangs C1 mir die Intvariable „dämmerungStatus“ auf 0 oder 1 setzen. Im Main Programm sollen dann in Abhängigkeit von dämmerungStatus drei Ausgänge entsprechend geschalten werden. Das Programm funktioniert nicht. Ich bitte euch um Hilfe. Im Anhang befindet sich dass Programm als Textdatei. Danke im Voraus für Eure Bemühung. Schöne Grüße Peter
Davon abgesehen, das die Funktion dieses Programms locker von einem einzigen Komparator übernommen werden könnte, wird wohl die Kommunikation zwischen ADC ISR und Hauptprogramm nicht funktionieren. Schreib da mal
1 | volatile int daemmerungStatus = 0; |
und probier das aus.
Matthias S. schrieb: > Davon abgesehen, das die Funktion dieses Programms locker von einem > einzigen Komparator übernommen werden könnte, wird wohl die > Kommunikation zwischen ADC ISR und Hauptprogramm nicht funktionieren. > Schreib da mal >
1 | > volatile int daemmerungStatus = 0; |
2 | >
|
> und probier das aus.
Besser ist sogar noch
1 | volatile uint8_t daemmerungStatus = 0; |
Gruß Frank
Pimi schrieb: > Im Anhang befindet sich dass Programm als Textdatei. Welchen Sinn hat es, das Programm nicht als c-Datei zu posten?
Thomas E. schrieb: > Welchen Sinn hat es, das Programm nicht als c-Datei zu posten? Anscheinend wissen viele Newcomer nicht, das das hier geht. Frank L. schrieb: > Besser ist sogar noch > volatile uint8_t daemmerungStatus = 0; Das kann man nicht wissen. Da der TE so antiquierte Ausdrücke wie 'unsigned char' benutzt, kann es gut sein, das uint8_t nicht klappt. Ist auch in dem Fall wurscht, ob das nun 2 bytes oder 1 byte belegt. Das Programm füllt ja nicht mal ein Zehntel des MC und kann, wie gesagt, stromsparend durch einen LM393/339 ersetzt werden.
Hi Matthias, technisch gesehen hast Du vollkommen Recht. Aber: In einer ISR ist der Zugriff auf eine int Variable nicht atomar. Was in einigen Threads bereits hinreichend und ausgiebig diskutiert wurde. Deshalb, habe ich mir den Hinweis erlaubt. Hinzu kommt die Speicherverschwendung von immerhin 1 Byte :-). Gruß Frank
Vielen dank das funktioniert mit volatile int. Schöne Grüße
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.