Forum: Mikrocontroller und Digitale Elektronik Fehler im Programm zum steuern von ATmega 328p Microcontroller


von Pimi (Gast)


Angehängte Dateien:

Lesenswert?

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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Frank L. (Firma: Flk Consulting UG) (flk)


Lesenswert?

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

von Thomas E. (thomase)


Angehängte Dateien:

Lesenswert?

Pimi schrieb:
> Im Anhang befindet sich dass Programm als Textdatei.

Welchen Sinn hat es, das Programm nicht als c-Datei zu posten?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Frank L. (Firma: Flk Consulting UG) (flk)


Lesenswert?

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

von Pimi (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.