www.mikrocontroller.net

Forum: Compiler & IDEs atmega32 2-Tasten 5-Funktionen Absturzproblem


Autor: Andi H. (leguan08)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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?
  unsigned char tcnt1h = TCNT1H;
  // ...
  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.
  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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner wrote:

> Was soll das?
>
>
>   unsigned char tcnt1h = TCNT1H;
>   // ...
>   TCNT1H = tcnt1h;      // restore for delay() !
> 
>
> 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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch wenn Softwerker das gerne verdrängen, Bugs gibt es auch in der 
Hardware.

Ist da alles störungssicher?

Oliver

Autor: UBoot-Stocki (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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&...)

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

Gruß

Andreas

Autor: Andi H. (leguan08)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: UBoot-Stocki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe die o.g. Snubber-Glieder eingebaut, dann war alles gut !

Gruß

Andreas

Autor: Andi H. (leguan08)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
UBoot-Stocki wrote:
> Hi,
>
> ich habe die o.g. Snubber-Glieder eingebaut, dann war alles gut !
>
> Gruß
>
> Andreas

Hallo Andreas,

kannst du mir genauer sagen, wie und was du eingebaut hast ?

Gruß,

Andi

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.