Wow danke voll super von euch alles funktioniert!!!!
Vielen Dank
Druckbare Version
Wow danke voll super von euch alles funktioniert!!!!
Vielen Dank
Man, nochmals ne Frage ich als Anfänger komm echt nicht weiter dieses Programm sollte eigentlich ein Lauflicht darstellen, trotzdem zeigt es nur dauerhaft leuchtende LEDs.Code:#include <avr/io.h>
int Time = 100000;
void main ()
{
while(1)
{
DDRC = 0xff;
PORTC = 0x01;
Wait(Time);
PORTC = 0x02;
Wait(Time);
PORTC = 0x04;
Wait(Time);
PORTC = 0x08;
Wait(Time);
PORTC = 0x10;
Wait(Time);
PORTC = 0x20;
Wait(Time);
PORTC = 0x20;
Wait(Time);
PORTC = 0x10;
Wait(Time);
PORTC = 0x08;
Wait(Time);
PORTC = 0x04;
Wait(Time);
PORTC = 0x02;
Wait(Time);
PORTC = 0x01;
Wait(Time);
}
return;
}
void Wait(int waitTime)
{
for(zaehler = 0;zaehler<waitTime; zaehler++)
{
}
return;
}
Hilfe Hilfe Hilfe
Hat wer ne Ahnung was falsch ist????
Probier es mal damitDas delay hat allerdings den Nachteil das der µC dort wirklich wartet. Besser wäre ein Timer.Code:#define F_CPU 1000000UL // 1 MHz
#include <util/delay.h>
#include <avr/io.h>
int main (void){
DDRC = 0xff;
while(1)
{
PORTC = 0x01;
_delay_ms(5);
PORTC = 0x00;
PORTC = 0x02;
_delay_ms(500);
PORTC = 0x00;
PORTC = 0x04;
_delay_ms(500);
PORTC = 0x00;
PORTC = 0x08;
_delay_ms(500);
PORTC = 0x00;
PORTC = 0x10;
_delay_ms(500);
PORTC = 0x00;
PORTC = 0x20;
_delay_ms(500);
PORTC = 0x00;
PORTC = 0x20;
_delay_ms(500);
PORTC = 0x00;
PORTC = 0x10;
_delay_ms(500);
PORTC = 0x00;
PORTC = 0x08;
_delay_ms(500);
PORTC = 0x00;
PORTC = 0x04;
_delay_ms(500);
PORTC = 0x00;
PORTC = 0x02;
_delay_ms(500);
PORTC = 0x00;
PORTC = 0x01;
_delay_ms(500);
PORTC = 0x00;
}
return;
}
nur als ergänzung:
in deinem code wird wahrscheinlich die leere for-schleife vom compiler wegoptimiert. wenn du mit asm("NOP"); einen befehl (in diesem fall einen tu-nichts-befehl) in die for schleife setzt, kann sie nicht mehr wegoptimiert werden.
es spricht aber nichts gegen Huberts code, und der vorteil ist, dass du ohne viel rechnerei zu halbwegs genau den wartezeiten kommst, du du willst.
gruesse
Ja, es reicht die Frequenz einmal zu definieren.
Ich hab den Beitrag auf den Besserwessi geantwortet hat gelöscht, weil ich selbst draufgekommen bin :oops: . Tut mir leid!
Das nächste Mahl werde ich ihn einfach editieren.
Hier der Inhalt des Beitrags:
Das #define F_CPU 1000000UL in dem Code von Hubert.G kann ich weglassen, wenn ich die Frequenz im AVR-Studio eingestellt habe, oder?
Nein, kannst du nicht, diese Frequenzangabe braucht das delay um die Zeiten richtig einzustellen.
Wie kann ich zwei Pins eines Ports ändern, aber die anderen so lassen wie sie sind?
Um nur 2 Bits eine Prots zu ändern muß man den alten Wert auslesen und dann nur die Gewünschten Bits ändern: das geht z.B. so:
portB = (portB & Maske) | (~Maske & neu)
Dabei sind in Maske die Bits gesetzt die unverändert bleiben sollen. Auf die zweite und verknüpfung kann man eventuell verzchten wenn in neu alle Bits die bleiben sollen schon gelöscht sind.
Könnte bitte jemand ein Beispiel reinstellen?
edit:
ich hab jetzt ein bsp gefunden:
Aber ich verstehe nicht ganz, was die Zeichen & ~ | < machen.Code:
PORTC |= (1<<PC0) | (1<<PC2); // Pins PC0 und PC2 "high"
PORTC &= ~( (1<<PC0) | (1<<PC2) ); //Pins PC0 und PC2 "low"