PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : paar sec fahren?



donald_dack
16.11.2009, 12:39
Hallo

ich möchte ein paar secunden nach vohrne und ein par secunden zurück fahren




#define VOHR 0b00101100
#define ZURUECK 0b00110100
#define LINKS 0b00100110
#define RECHTS 0b00100101
#define GERADE 0b00100111
#define BREACK 0b00111111

#define V_MITE 0b00111101
#define V_LINKS 0b00111011
#define V_RECHTS 0b00111110
#define H_MITE 0b00101111
#define H_LINKS 0b00011111
#define H_RECHTS 0b00110111

#define LED_ROT 0b10000000
#define LED_GRUEN 0b01000000
#define LED_AUS 0b00000000

#include <avr/io.h>
#include <avr/interrupt.h>

#define DURCHLEUFE 256

volatile unsigned int zahl, wert=0;

ISR(TIMER0_OVF_vect)
{

wert++;
TCNT0 = 256 -DURCHLEUFE;

}

int main(void)
{

TCNT0 = 256 -DURCHLEUFE;
TCCR0 = (1 << CS02)|(1 << CS00);
TIMSK = (1 << TOIE0);
sei();

DDRB = 0xFF; //Ausgang
DDRC = 0b11000000; //Eingang

while (1);
if (wert == 10)
{
PORTB = VOHR;
wert = 0;
zahl++;
}
if (zahl == 10)
{
PORTB = BREACK;
PORTB = ZURUECK;
zahl = 0;
wert = 0;
}

return 0;
}


wie könnte man das noch lössen derzeit get das programm nicht.

Danke
by Donald

askazo
16.11.2009, 12:54
Ich habe jetzt nicht alles kontrolliert, aber der wichtigste Fehler ist das
while(1); Damit hast Du eine leere Endlosschleife definiert, alle Statements dahinter werden also nie erreicht.
Versuchs mal mit
while (1){
if (wert == 10)
{
PORTB = VOHR;
wert = 0;
...


Gruß,
askazo

donald_dack
16.11.2009, 13:07
ok ich habe es jetzt so um gändert



#define VOHR 0b00101100
#define ZURUECK 0b00110100
#define LINKS 0b00100110
#define RECHTS 0b00100101
#define GERADE 0b00100111
#define BREACK 0b00111111

#define V_MITE 0b00111101
#define V_LINKS 0b00111011
#define V_RECHTS 0b00111110
#define H_MITE 0b00101111
#define H_LINKS 0b00011111
#define H_RECHTS 0b00110111

#define LED_ROT 0b10000000
#define LED_GRUEN 0b01000000
#define LED_AUS 0b00000000

#include <avr/io.h>
#include <avr/interrupt.h>

#define DURCHLEUFE 256

volatile unsigned int zahl, wert=0;

ISR(TIMER0_OVF_vect)
{

wert++;
TCNT0 = 256 -DURCHLEUFE;

}

int main(void)
{

TCNT0 = 256 -DURCHLEUFE;
TCCR0 = (1 << CS02)|(1 << CS00);
TIMSK = (1 << TOIE0);
sei();

DDRB = 0xFF; //Ausgang
DDRC = 0b11000000; //Eingang

while (1);
{
if (wert == 10)
{
PORTB = VOHR;
wert = 0;
zahl++;
}
if (zahl == 10)
{
PORTB = BREACK;
PORTB = ZURUECK;
zahl = 0;
wert = 0;
}
}
return 0;
}


es geht aber trotsdem nicht.

Danke
by Donad

Hubert.G
16.11.2009, 18:58
Der Fehler ist der ; nach while(1)

donald_dack
16.11.2009, 23:29
ok Danke dir das war es wirklich.

Danke
by Donald

donald_dack
17.11.2009, 14:07
Hi

Ich habe ein problem ich bekomme es einfach nicht hin das ich zwei gleich lange zeit ab schnite habe.




#define VOHR 0b00101100
#define ZURUECK 0b00110100
#define LINKS 0b00100110
#define RECHTS 0b00100101
#define GERADE 0b00100111
#define BREACK 0b00111111

#define V_MITE 0b00111101
#define V_LINKS 0b00111011
#define V_RECHTS 0b00111110
#define H_MITE 0b00101111
#define H_LINKS 0b00011111
#define H_RECHTS 0b00110111

#define LED_ROT 0b10000000
#define LED_GRUEN 0b01000000
#define LED_AUS 0b00000000

#include <avr/io.h>
#include <avr/interrupt.h>

#define DURCHLEUFE 256

volatile unsigned int wert=0;

ISR(TIMER0_OVF_vect)
{

wert++;
TCNT0 = 256 -DURCHLEUFE;

}

int main(void)
{

TCNT0 = 256 -DURCHLEUFE;
TCCR0 = (1 << CS02)|(1 << CS00);
TIMSK = (1 << TOIE0);
sei();

DDRB = 0xFF; //Ausgang
DDRC = 0b11000000; //Eingang

while (1)
{

if (wert <= 20)
{
PORTC = LED_AUS ;
PORTC = LED_ROT ;
}

else if(wert <= 60)
{
PORTC = LED_AUS ;
}

else if (wert <= 80)
{
PORTB = LED_AUS ;
PORTB = LED_GRUEN ;
}

else if (wert <= 100)
{
PORTC = LED_AUS ;
}

else
{
wert = 0 ;
}

}
return 0;
}


ich habe schon rum probirt was mache ich falsch?

Danke
by Donald

askazo
17.11.2009, 15:10
Im Moment müsste Dein Programm so laufen:
1) rote LED leuchtet für 20 Zeiteinheiten
2) danach leuchtet für 40 Zeiteinheiten nichts
3) grüne LED leuchtet für 20 Zeiteinheiten
4) danach leuchtet für 20 Zeiteinheiten nichts

Um welche Zeitabschnitte geht es Dir denn? Was willst Du überhaupt erreichen?

Gruß,
askazo

donald_dack
18.11.2009, 19:45
hi
ich möchte einfach nur das die rote led an get und dan aus und dan sol die grüne an gehen dan wider aus und von forne beginen alles sollte eigentlich 20 zeiteinheiten lange sein.

im momment get nur die rote led ca 1 sec an dan 5 sec aus und wider 1 sec an, die grüne leuchtet garnicht.

ich weiss echt nicht an was es ligt das problem muss aber im programm sein hab die hardware nochmal geprüft.

Danke
by Donald.

Hubert.G
18.11.2009, 20:11
Du hast da PORTB und PORTC vermischt.

donald_dack
18.11.2009, 20:17
ja du hast recht und ich zermartere mir den koppf

thx