mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmega 7-Segment "Timer"


Autor: kroller (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das ist ja komisch!!!

Ich kenn mich leider noch nicht so gut aus aber wundere mich doch was
ich hier falsch gemacht habe. Ich steuere 3 7-Segmentanzeigen mit dem
atmega8 an und das klappt auch super, außer, dass ich noch die von euch
geposteten Transistoren kaufen muss(Helligkeit"Stromoptimiereung").
Jetzt hab ich mir gedacht, dass ich die 7- Segment anzeigen durch einen
Timer noch Zeitoptimieren könnte, doch irgendwas ist falsch. Sobald ich
im Hauptprogramm sei schreibe schmiert das ganze ab selbst wenn ich den
Timer rausnehme. Wisst ihr an was das liegen kann? Kann es sein dass bei
dieser Initialisierung der Interrupts irgend ein anderer Interrupt
ausgelößt wird, der das Programm dann zum Absturz bringt? wie gesagt
ohne sei läuft das Program ohne Probleme. Im Studio läufts eigentlich
auch soweit ich das übersehen kann, da ich die delays dann immer
verkürze, da ich nicht so lange warten will.
Wäre super wenn Ihr euch mal die Initialisierung durchschauen könnt.
Mit freundlichem Gruß

Autor: Jens123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi
du kannst auf jedenfall die Interupts auch so definieren...

.cseg
 rjmp RESET ; Reset Handler
 rjmp EXT_INT0 ; IRQ0 Handler
 reti; rjmp EXT_INT1 ; IRQ1 Handler
 reti ;TIM2_COMP ; Timer2 Compare Handler
 rjmp  TIM2_OVF ; Timer2 Overflow Handler
 reti ;TIM1_CAPT ; Timer1 Capture Handler
 reti ;TIM1_COMPA ; Timer1 CompareA Handler
 reti ;TIM1_COMPB ; Timer1 CompareB Handler
 reti ;TIM1_OVF ; Timer1 Overflow Handler
 rjmp TIM0_OVF; Timer0 Overflow Handler
 reti ;SPI_STC ; SPI Transfer Complete Handler
 reti ;USART_RXC ; USART RX Complete Handler
 reti ;USART_UDRE ; UDR Empty Handler
 reti ;USART_TXC ; USART TX Complete Handler
 reti ;ADC ; ADC Conversion Complete Handler
 reti ;EE_RDY ; EEPROM Ready Handler
 reti ;ANA_COMP ; Analog Comparator Handler
 reti ;TWSI ; Two-wire Serial Interface
 reti ;SPM_RDY ; Store Program Memory Ready


Evtl ist das schon der Fehler

was passiert denn?
du schreibst schmiert er dir ab??
Wo Wobei???

Autor: Jens123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS: Timer ohne Vorteiler koennte schon das Problem sein

setz den etwas nach oben auf 512 / 1024 etwa

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi...

> HAUPTPROGRAMM:
> sei
> .....und hier gehts dann weiter

Tja, und wie gehts dann weiter??
Es ist auch noch keine ISR definiert...

Die Denkweise beim Programmieren mit Timer-Int ist auch ganz anders als
bei einem Programm mit Zeitschleifen.

Ohne Timer schreibst du dein Programm und fügst dort Zeitschleifen
(Verzögerungen) ein, wo gewartet werden muss.

Mit Timer sorgst zu erstmal (mittels Timer) für einen periodisch (also
alle n Prozessortakte) auftretenden Interrupt, den du als Zeitnormal
sehen kannst. Wenn die Int-Abstände groß genug sind, kannst du sogar
das gesamte Programm in der ISR ausführen. In deinem Fall bietet sich
an, die 7-Segment-Ausgabe und das Auslesen des ADC in der ISR zu
machen.
Zähle in der ISR ein Register hoch (oder runter), welches bestimmt,
welcher "Task" gerade an der Reihe ist. Dies wären dann Ausgabe der
Bitmuster für die nächste Stelle und Einschalten der nächsten Stelle
und alle x Anzeigezyklen das Auslesen des ADC. Wird ADC ausgelesen,
dann setzt man ein Flag in einem dafür angelegten Register (heißt bei
mir meist "mode"). Dieses Register wird vom Hauptprogramm in einer
Schleife abgefragt und verzweigt (bei gesetztem Flagbit) in die Routine
zum Berechnen des neuen Wertes und holen der Ausgabe-Bitmuster aus dem
Flash (Tabelle).
So kannst du in der ISR (durch Setzen von Mode-Flags) festlegen, was
das Hauptprogramm zu tun hat. Hat das Hauptprogramm einen "Job"
erledigt, muss es auch das Flag zurücksetzen. Hat das Hauptprogramm
alle Jobs erledigt (mode=0), dann kann es den MC in den Sleep-Mode
schicken, er wird dann vom nächsten Timer-Int wieder geweckt.

Guten Rutsch...
...HanneS...

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.