Problem mit Quarz?

Gast #272397
Lesenswert?
• ▲
▼
Hallo

ich habe an meinem ATmega8 einen 4MHz Quarz angeschlossen. Kapazitäten
habe ich nach Datenblatt ausgewählt.

Ich kann den ATmega ohne Probleme brennen und auch das Programm läuft
(einfacher Blinker). Allerdings bleibt das Programm nach ein paar
Sekunden stehen. Habe sämtliche Funktionen überprüft; Jede Funktion
arbeitet eingenständig -> egal von wo sie aufgerufen wird, bzw. ein
Interrupt sie unterbricht.

Nun vermute ich, dass das Quarz nicht richtig schwingt; Habe ein 30MHz
Oszi da; wie kann ich messen, ob das Quarz richtig schwingt? Habe es
zwischen Masse und Xtal versucht - ohne großen Erfolg. Nun kann es
natürlich sein, dass das schon aussagekräftig genug ist.

Wie schaut eine Schwingung des Quarzes aus?
Gast #272398
Lesenswert?
• ▲
▼
Das ist wenn ein Sinus.. nur einige Oszis koenen das nicht Messen, weil
der Quarz zusammenbricht (Kapazitive belastung)

Programmierst du in ASM?

Ich hatte am WE mal einen Fehler gehabt und stadt RETI nud RET
geschrieben naja da lief der Controller zwar aber er ging nicht mehr in
die Interruptroutine, weil er dachte noch darin zu sein

Gruss
Gast #272399
Lesenswert?
• ▲
▼
> Wie schaut eine Schwingung des Quarzes aus?

Ungefährer Sinus. Aber Vorsicht! Durch die Belastung des Tastkopfes
kann dieser Sinus zusammenbrechen, deshalb 10:1 Einstellung wählen.


Sind die Fusebits richtig gesetzt? Wenn nicht läuft die MCU evtl. auf
dem internen RC-Clock.
Gast #272400
Lesenswert?
• ▲
▼
Fuses sollten richtig sein...
Der Blinker ist auf Sekundentakt parametriert. Mit falschen Fuses würde
der Blinker nicht im Sekundentakt blinken.

Aber nochmal zur Sicherheit, wie sollten die Fuses für externen Clock
gesetzt werden?
Gast #272401
Lesenswert?
• ▲
▼
Ja,

ich programmiere ASM - derweil tippe ich dann doch auch auf irgendeinen
Überlauf. Shit, kann nicht OnChip debuggen.
Reti habe ich eingehalten;  - keine Ahnung, was da los ist...

itemp wird nirgends mehr verwendet

TIM0_OVF:
  lds    itemp,mySREG
  sbrs  itemp,0        ;überspringe, wenn erstes BIT gelöscht ist
  rjmp  timer0restart
timer0mydelay:
  inc    mydelay_azyk    ;jeden Timer2 überlauf inkrementieren
timer0restart:
  ldi    itemp,0xdb      ;Timerstartwert schreiben
  out    TCNT0,itemp
reti
;
Gast #272402
Lesenswert?
• ▲
▼
Ich würde eher auf ein Softwareproblem tippen, Stichwort Stack-Overflow
(z.B. Unterprogramm mit RJMP statt RCALL aufgerufen), oder Stack nicht
richtig initialisiert. Probier Deinen Code mal im Simulator und
beobachte Stackpointer und SRAM-Inhalt.

MfG Olaf
Gast #272403
Lesenswert?
• ▲
▼
So...für die Leute, die über den gleichen Fehler stolpern.
Olaf_K hat den entscheidenen Hinweis gegeben.
die mainLoop war keine wirklich schleife mehr ;-) Sie hat sich immer
wieder selber mit rcall aufgerufen...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 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.