atmega32 2-Tasten 5-Funktionen Absturzproblem

OP #668773
Lesenswert?
• ▲
▼
Hallo Zusammen,

habe hier versucht eine Zimmersteuerung mit 2 Tasten und 5 Funktionen 
(Licht und Steckdosen) zu programmieren. Funktioniert soweit auch 
wunderbar, nur bleibt das Ding nach ein bis zwei Tagen einfach hängen 
und nichts geht mehr. Auch der eingebaute Watchdog löst nicht aus. Nach 
einem Reset funktioniert wieder eine Weile alles, bis es wieder 
hängenbleibt. Habe auch den ATmega32 schon getauscht -> gleiches 
verhalten. Ich finde im Code einfach den Fehler nicht, oder bin einfach 
zu blind.

Könnt Ihr bitte mal über den angehängten Code schauen, ich weiß einfach 
nicht mehr weiter, wo sich der Fehler befinden könnte.

Vielen Dank im voraus,

Gruß Andi
Angehängte Dateien:
#669172
Lesenswert?
• ▲
▼
@ Andi H. (leguan08)

>Könnt Ihr bitte mal über den angehängten Code schauen, ich weiß einfach
>nicht mehr weiter, wo sich der Fehler befinden könnte.

Das #define für F_CPU muss vor dem #includ von util/delay kommen, sonst 
spuckt der Compiler einen Fehler aus.

Was soll der Nonsense mit der delay_us() Schleife? Einfach _delay_ms(1) 
tuts locker.

Erst alle Sachen initalisieren, dann erst die Interrupts freigeben.

Was soll das?
1
  unsigned char tcnt1h = TCNT1H;
2
  // ...
3
  TCNT1H = tcnt1h;      // restore for delay() !

Das ist Unsinn. Denn es macht exakt GAR nichts! Siehe Zugriff auf 16 Bit 
Register!

Solche Tricks würde ich mir auch verkneifen.
1
  if( ++prescaler == (unsigned char)DEBOUNCE )

DEBOUNCE ist 256, prescaler ein uint8_t. Das passt irgendwie nicht 
zusammen.

Wo nun das exakte Problem steckt, hab ich leider keine Ahnung.

MFG
Falk
#669252
Lesenswert?
• ▲
▼
Falk Brunner wrote:

> Was soll das?
>
>
1
>   unsigned char tcnt1h = TCNT1H;
2
>   // ...
3
>   TCNT1H = tcnt1h;      // restore for delay() !
4
>
>
> Das ist Unsinn. Denn es macht exakt GAR nichts! Siehe Zugriff auf 16 Bit
> Register!

Das ist kein Unsinn, siehe Zugriff auf 16 Bit Register!

Wenn ein Interrupt und das Main auf ein 16Bit Register zugreifen, muß 
der Interrupt das High-Byte sichern oder das Main muß die Interrupts für 
den kompletten Zugriff sperren.
Das Temp-High Register ist nämlich nur einmal da (für TCNT1, ICR1, 
OCR1A, OCR1B).


> DEBOUNCE ist 256, prescaler ein uint8_t. Das passt irgendwie nicht
> zusammen.

Doch, es reichen 8Bit, um /256 zu teilen (256 entspricht dann der 0).


Peter
Gast #670817
Lesenswert?
• ▲
▼
Hi,

"habe hier versucht eine Zimmersteuerung mit 2 Tasten und 5 Funktionen
(Licht und Steckdosen) zu programmieren."

Wie sieht denn die HW aus? Schaltest Du mit Relais? Hast Du 
Snubber-Glieder verbaut 
(http://de.wikipedia.org/w/index.php?title=Snubber&redirect=no)

Ich hatte mit meiner Bewässerungssteuerung die selben Probleme und 
konnte diese durch Entstörmaßnahmen beheben...

Gruß

Andreas
OP #672262
Lesenswert?
• ▲
▼
Bei der Hardware habe ich für die Eingänge Optokoppler (CNY 17) 
verwendet, die sich zwischen den normalen Tastschaltern für das "alte" 
Licht befinden und mit 5V geschaltet werden.

Bei den Ausgängen habe ich als Lastschalter einen ULN2803A verwendet, 
der dann 230V Relais schaltet.

Bis auf extra Schutzdioden an den Relais sind keine speziellen 
RC-Glieder verbaut.

> Ich hatte mit meiner Bewässerungssteuerung die selben Probleme und
> konnte diese durch Entstörmaßnahmen beheben...

was hast du denn speziell eingebaut um die Störungen zu vermeiden ?

Gruß

Andi

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.