mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wakeup ATMega16L


Autor: Chris Wieninger (chriswie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hab ein kleines Problem, hab nen ATMega16L Batteriebetrieben..

Jetzt fahr ich ihn in den Powerdown Modus, klappt ohne Probleme

Int2 hab ich zum Aufwecken, daran hängt der Alarm Ausgang von ner RTC.

Kommt ein Alarm, dann wacht er auch auf aber führt mir nicht die 
Funktionen aus die danach kommen .. so wie´s aussieht macht er einen 
Reset.


Interrupt Flags sind richtig eingestellt, Interrupt Routine hat nur ein 
RETI.

Powerdown Modus

Im AVR Simulator hauts auch nicht hin, da springt er nach dem Sleep 
irgendwo ins Programm, hab nicht nachvollziehen können wohin ..

Geht der Simulator eigentlich richtig ????

Grüße, Chris

Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Interrupt Routine hat nur ein RETI.

???

Und was soll er dann ausführen? Die ISR sollte doch schon Code 
enthalten, oder nicht?

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jupp: Erst nachdenken, dann schreiben...
Natürlich sollte die MCU nach dem IRQ und dem Powerup im Programm da 
weitermachen, wo sie in den Powerdown geschickt wurde.

Autor: Chris Wieninger (chriswie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also .. nochmal alles getestet .. im Powerdown springt er nach dem Sleep 
irgendwo ins programm im Simulator.. und im Prozessor macht er einen 
Reset ..


MAlmStart:
    cli
    rcall alarmstellen
    clr temp1
     out TCCR0, Temp1
    ldi temp1,0b00001000
    out PortB,temp1

    ldi temp1,  (1<<SM1)|(1<<SE)
    out MCUCR, temp1
    sei
    sleep          ; Geh schlafen
                nop
                nop
                nop
    ldi temp1,200
    STS LCD_Bright,temp1
    out OCR0,temp1


    ldi Temp1, (1<<com01 | 1<<WGM00 |1<<WGM01 | 1<<CS00)
     out TCCR0, Temp1


    rcall LCD_Clear
    ldi menu,2
stoppi:
    rjmp Stoppi


Ich sehe eigentlich keinen Fehler ..

Hab das ganze mal im Powersave modus probiert, da funktionierts ohne 
Probleme ..

Ich verstehs langsam nicht mehr ..

P.S. ist jemanden eigentlich schon mal aufgefallen das die Interrupt 
Tabelle im Datasheet falsch ist ???

Grüße, Chris

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> P.S. ist jemanden eigentlich schon mal aufgefallen das die Interrupt
> Tabelle im Datasheet falsch ist ???
Nö, bis jetzt nicht. Was ist denn Deiner Meinung nach falsch? Würde mich 
schon brennend interessieren, weil ich oft mit dem ATMega16 arbeite. Und 
zwar bisher ohne Probleme in Sachen Interrupt-Vektor-Tabelle...

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Interrupt Routine hat nur ein RETI.
Fiel mir grad noch so auf: Da Du nicht den kompletten Code gepostet 
hast, kann ich das jetzt nur vermuten, aber bei den AVRs mit mehr als 8 
KB Flash (also auch beim ATMega16) sind die Interrupt-Vektoren 2 Wörter 
lang. Wenn Du da nur jeweils ein reti reinschreibst, dann sind Probleme 
vorprogrammiert, weil reti nur ein Wort lang ist. Wenn schon, dann an 
jede Vektoradresse
nop
reti
sonst gehts mit großer Wahrscheinlichkeit schief...

Autor: Chris Wieninger (chriswie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
johnny.m wrote:
>> Interrupt Routine hat nur ein RETI.
> Fiel mir grad noch so auf: Da Du nicht den kompletten Code gepostet
> hast, kann ich das jetzt nur vermuten, aber bei den AVRs mit mehr als 8
> KB Flash (also auch beim ATMega16) sind die Interrupt-Vektoren 2 Wörter
> lang. Wenn Du da nur jeweils ein reti reinschreibst, dann sind Probleme
> vorprogrammiert, weil reti nur ein Wort lang ist. Wenn schon, dann an
> jede Vektoradresse
>
> nop
> reti
> 
> sonst gehts mit großer Wahrscheinlichkeit schief...
Also zu Interrupt Problem ..

wenn ich meine Interrupt Tabelle so schreibe dann springt er bei mir 
falsch ..

siehe 5. Zeile .. wäre laut Datasheet IRQ2 ..


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

aber ich glaub ich weiss wo jetzt mein Fehler ist ..

2 Wörter ..

muss ich dann so schreiben ?

.CSEG
.org $0000
          nop
                rjmp init     ;Reset Handler
                nop
    reti      ;rjmp EXT_INT0 ; IRQ0 Handler
                nop
    reti      ;rjmp EXT_INT1 ; IRQ1 Handler
                nop
    reti
                ...


muss ich gleich mal probieren ..

Grüße, Chris

Autor: Chris Wieninger (chriswie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Jonny !!!

Suuuper .. es funktioniert .. :-)

Ich dacht mir schon das da irgendwas mit dem Stack nicht funktioniert ..

Kommt davon wenn man nur immer mit den kleinen AVR´s programmiert und 
dann auf nen größeren umsteigt ..

aber gut zu wissen ..

Vielen dank nochmals ..

Grüße, Chris


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.