Hallo ich habe ein Problehm mit dem Tiny24V. wenn ich ihn in den sleep Modus versetze startet er nicht mehr mit der taste an INT0 ich habe an dem Pin "Motor" eine LED hängen die beim INT0 angehen soll und beim WDR INT aus . wenn ich in der Hauptschleife den sleep befehl weglasse geht alles wie gewünscht nur sobald die CPU in sleep geht startet sie nicht mehr. kann mir einer sagen wo da mein Denkfehler liegt !!! .include "tn24def.inc" .def temp = r16 ; portA Belegung .equ LDR1 = 0 .equ LDR2 = 1 .equ res_1 = 2 .equ Power_LDR = 3 .equ JMP2 = 4 .equ JMP1 = 5 .equ JMP5 = 6 .equ Motor = 7 ; portB Belegung .equ RM_Auf = 0 .equ RM_zu = 1 .equ Schalter = 2 .equ Reset_pin = 3 .org 0x00 rjmp Reset rjmp INT0_pin rjmp PCint0_pin rjmp PCint1_pin rjmp WDT rjmp Tim1_Capt rjmp Tim1_CompA rjmp Tim1_CompB rjmp TIM1_ovf rjmp Tim0_CompA rjmp Tim0_CompB rjmp Tim0_ovf rjmp Ana_comp rjmp ADCc rjmp EE_RDY rjmp USI_STR rjmp USI_OVF Reset: ldi temp,ramend Out Spl , temp ldi temp, 0b10001000 ; A7 und A3 Ausgang Out ddra , temp ldi temp, 0b01110111 Out Porta , temp ldi temp, 0b00000000 Out ddrb , temp ldi temp, 0b11111111 Out Portb , temp ldi temp,0b00110001 ;Sleep enabele / power down einschalten DB S.37 out MCUCR,temp ;int0 pin weschsel DB S.51 ldi temp,0b01100001 ;WDT einschalten / interrupt ca 8sec DB S.45 out WDTCSR,temp ldi temp,0b01000000 ;int0 einschalten DB S.51 out GIMSK,temp ldi temp,0b00000000 ;vorteiler auf 1 DB S.32 out CLKPR,temp sei Loop: sleep rjmp Loop WDT: cbi porta,motor reti Int0_pin: sbi porta,motor reti ;INT0_pin: reti PCint0_pin: reti PCint1_pin: reti ;WDT: reti Tim1_Capt: reti Tim1_CompA: reti Tim1_CompB: reti TIM1_ovf: reti Tim0_CompA: reti Tim0_CompB: reti Tim0_ovf: reti Ana_comp: reti ADCc: reti EE_RDY: reti USI_STR: reti USI_OVF: reti
Condor schrieb: > ldi temp,0b01100001 ;WDT einschalten / interrupt ca 8sec DB S.45 > out WDTCSR,temp Mein Vorschlag: benutze statt direkter Bit-Kodierung die Konstanten aus der tn24def.inc Dann ist die Wahrscheinlichkeit geringer, dass du die Falschen Bits setzt bzw siehst Fehler schneller. Den Fehler würd ich vermuten beim WDTCSR, müsste evtl. noch WDE (Bit 3) gesetzt sein (?).
Danke schon mal für deine Antwort aber der WDR INT geht aus dem sleep Modus ohne Probleme . Sorgen macht mir der INT0 . mit INT0 erwacht die CPU nicht mehr ich habe es aber versucht und des ändert nichts an meinen Problem
Hi >ldi temp,0b00110001 ;Sleep enabele / power down einschalten DB S.37 > out MCUCR,temp ;int0 pin weschsel DB S.51 Aus dem Power-Down-Mode wird der Controller nur durch einen Level-Interrupt aufgeweckt. Du hast aber für INT0 Pin-Change eingestellt. MfG Spess
Manchmal sieht man den Wald vor lauter bäumen nicht ! ich habe nämlich fallende flanke und steigende flanke auch schon versucht nur beide Bits auf 0 habe ich noch nie getestet.... Jetzt geht es vielen herzlichen Dank jetzt muß ich mir was einfallen lassen weil an dem Int0 eigentlich ein Schalter sitzt und bei jedem umschalten der INT ausgeführt werden soll...
Hi Dann schalte doch im Interrupt in einen anderen Mode. MfG Spess
also entweder verstehe ich es jetzt nicht oder wir reden von unterschiedlichen Sachen . An INT0 hängt ein Schalter und wen der umgeschaltet wird soll der Tiny erwachen . da er aber nur durch einen Level-Interrupt aufgeweckt werden kann geht das doch dann nicht...
Condor schrieb: > An INT0 hängt ein Schalter und wen der umgeschaltet wird soll der Tiny > erwachen . da er aber nur durch einen Level-Interrupt aufgeweckt werden > kann geht das doch dann nicht... Doch, aber nicht mit dem synchronen INT0, sondern mit dem asynchronen PCINT7:0 oder PCINT11:8. Such mal nach den Bits PCIE0 und PCIE1 sowie den Registern PCMSK0 bzw. PCMSK1. Christian.
Danke für den Tip - das macht jetzt genau das was ich brauche
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.