Hallo,
habe eine Schaltung mit nur einem Taster an INT0. Mit diesem Taster
möchte ich den Controller in den Schlafmodus (Modus=0) versetzen. Beim
weiteren Drücken soll der Moduszähler immer um 1 erhöht werden. Befindet
sich der Modus > 1 dann soll bei längerem Betätigen der Controller in
den Modus=0 wechseln und wieder ruhen im Power Down Mode. Habe schon
sehr vieles versucht, jedoch noch keine Code erzeugen können, der dies
ermöglicht.
Befehle die als Kommentar ausgeführt sind, habe ich schon an dieser
Stelle getestet, jedoch ohne Erfolg.
Hat jemand eine Idee oder Erklärung wie das funktioniert? Ich muss ja
sicherlich im Programm die MCUCR ändern oder?
/*
* LED_Cube_Attiny26.c
*
* Created: 22.12.2014 17:44:25
* Author:
*/
#define F_CPU 16000000
#include <avr/io.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
#include <util/delay.h>
int modus=0;
ISR(INT0_vect)
{
if (modus=0)
{
modus=1;
}
else
{
_delay_ms(500);
if ((!(PINB & (1<<PINB6))) && (modus>=1) && (modus<=2))
{
modus++;
}
else
{
modus=0;
}
}
}
int main(void)
{
//IO Konfiguration
DDRA=0xff;
DDRB=0x0f;
//MCUCR = 0x30; //Aktiveierung des Power Downs
//sei(); //Interrupts freigeben
//GIMSK |= (1 << INT0); //Ext. Interrupt aktivieren
while(1)
{
if (modus==0)
{
GIMSK &= ~(1 << INT0); //Ext. Interrupt deaktivieren
cli();
MCUCR = 0x30;
sei();
GIMSK |= (1 << INT0);
PORTA=0xff;
PORTB=0x01;
_delay_ms(200);
PORTA=0x00;
PORTB=0x0e;
//_delay_ms(500);
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_mode();
GIMSK &= ~(1 << INT0); //Ext. Interrupt deaktivieren
cli();
MCUCR=0x02;
sei();
GIMSK |= (1 << INT0); //Ext. Interrupt aktivieren
}
if (modus==1)
{
PORTB=0x01;
PORTA=0x11;
}
if (modus==2)
{
PORTB=0x01;
PORTA=0x11;
_delay_ms(100);
PORTB=0x0e;
PORTA=0x00;
_delay_ms(100);
}
if (modus==3)
{
PORTB=0x03;
PORTA=0xff;
}
}
return 0;
}
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.