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ß
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???
PS: Timer ohne Vorteiler koennte schon das Problem sein setz den etwas nach oben auf 512 / 1024 etwa
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.