SBI erfolgt unmittelbar nach CBI, das Tastverhältnis ist also praktisch gleich 1
hallo leute!
ich steh irgendwie auf dem schlauch, ich versuche meinen controller zu bremsen, doch das haut nicht ganz hin. ich möchte einfach nur das ein led blickt.
es kommt mir so vor als ob der controller aus meinem wait nicht herraus kommt?
ich benutze die RN-Control und hier ist mein quellcode:
#include <avr/io.h>
#define F_CPU 16000000 // 16MHz Taktfrequenz
#define SBIT(ADRESSE,BIT)(ADRESSE |=(1<<BIT)) //Makro zum setzen von einem Bit
#define CBIT(ADRESSE,BIT)((ADRESSE) &= ~(1<<BIT)) //Makro zum löschen von einem Bit
void wait(unsigned int ms);
void wait(unsigned int ms)
{
unsigned int zaehler;
while (ms)
{
zaehler = F_CPU / 5000;
while (zaehler)
{
asm volatile ("nop");
zaehler--;
}
ms--;
}
}
int main (void)
{
DDRC = 0Xff;
for(;;){
SBIT(PORTC,PC0);
wait(750);
CBIT(PORTC,PC0);
}
return 0;
}
besten dank im vorraus
servusssss
SBI erfolgt unmittelbar nach CBI, das Tastverhältnis ist also praktisch gleich 1
Disclaimer: none. Sue me.
Dein wait funktioniert, daran liegt's nicht.
Dein Fehler ist, dass Du nach dem CBIT kein wait mehr eingefügt hast. So wird CBIT aufgerufen und als nächster Befehl gleich wieder SBIT...
[edit]Da war Sprinter schneller. Man sollte nicht soviel mit Kollegen quasseln, bevor man 'Absenden' klickt....[/edit]
Gruß,
askazo
ganz einfach, so muss der kreislauf sein: warten-einschalten-warten- ausschalten und jetzt gehst du wieder gaaaaanz langsam nach vorne.
oder aber: einschalten-warten-ausschalten-warten und jetzt gehst du wieder gaaaaanz langsam nach vorne..he..he..
Danke Leute,
für euere hilfe, funktioniert tadellos und ist ja auch logisch
gruß servusssss
Hallo,
welchen Compiler verwendest du?
Also bei mit (GCC, WinAVR) läuft der Befehl:
SBIT(PORTC,PC0);
nicht. Oder muss man da eine Spezielle include Datei einbinden?
mfg
The future is closer then you think!
Ist wohl deprecated (veraltet) das.
Kannst du aber selber schnitzen, wenn's haben willst:
Code:#define SBIT(sfr,bit) sfr |= 1<<(bit) #define CBIT(sfr,bit) sfr &= ~(1<<(bit))
Disclaimer: none. Sue me.
Hi,
wie kommst du aus dieses? Ausprobiert oder berechnet? Wenn berechnet dann wie? Wie bist du insgesamt auf diese Wait Funktion gekommen bzw. wie lange du warten musst?Code:zaehler = F_CPU / 5000;
Gruß Michi
Hallo,
dass finde ich echt super! Wuste garnicht, dass man Definierte Funktionen auch Werte übergeben kann. Beziehungsweise Platzhalter verwenden kann.
Danke.
mfg
The future is closer then you think!
Lesezeichen