Habe folgende Problem möchte mit dem Mega8 Controller mit einem Taster eine LED einschalten. LED Ist an PORTD.0 angeschloßen mit der Masse der Taster an PORTB.0 ebenfalls mit der Masse. Hier das Prog was mach ich falsch bzw. wo liegt der fehler? #include <mega8.h> void main (void) { DDRD = 0x01; //PORTD.0 Ausgang DDRB = 0xFE; //PORTB.0 Eingang while (1) { if (!(PINB & (PINB.0=0))) //Ist PORTB.0 auf low? { PORTD.0 = 0; //Ja. LED an } else { PORTD.0 = 1; //Nein. LED aus }; }; }
Hast du einen PullUp-Widerstand am Taster? Falls nicht schalte den internen PullUp ein. Vorwiderstand der LED nicht vergessen!
> if (!(PINB & ("PINB.0=0")))
Ist das in "" gesetze nicht BASCOM-Dialekt? Ich mache es immer so:
if (!(PINB & (1<<PB0)))
Ich weiß nicht ob es so funktioniert wie du es geschrieben hast weil ich
es noch nie so Probiert habe aber ich wollte drauf mal hinweisen :)
Oh aber was ich noch sehe: Selbst wenn es funktioniert. Fragst du damit
ab ob PINB.0 = "1" ist und nicht "0". Weil du Fragst ob PINB.0 ungleich
"0" ist.
Habe das Programm jetzt geändert. Ist der Pullup Widerstand am Taster jetzt aktiv? Wieso leuchtet die LED sofort wenn der Controller Betriebsspannung hat (LED ist gegen Masse geschltet) und da DDRD.0 = 1 ist müsste sie doch aus sein oder? Und erst beim betätigen des Tasters aufleuchten oder verstehe ich da was falsch? #include <mega8.h> void main (void) { DDRD = 0x01; //PORTD.0 Ausgang DDRB = 0xFE; //PORTB.0 Eingang PORTB.0 = 0x01; //Pullup Widerstand aktiviert while (1) { if (!(PINB & (1<<PINB.0))) //Ist PORTB.0 auf low? { PORTD.0 = 0; //Ja. LED an } else { PORTD.0 = 1; //Nein. LED aus }; }; }
1 | if (!(PINB & (1<<PB0))) //Ist PORTB.0 auf low? |
2 | {
|
3 | PORTD.0 = 1; //Ja. LED an |
4 | }
|
5 | else
|
6 | {
|
7 | PORTD.0 = 0; //Nein. LED aus |
8 | }
|
Versuchs mal damit. Achso und "DDRB = 0xFE;" kannst du auch getrost weglassen wenn du bei PORTB nichts als Ausgang brauchst weil der AVR beim Starten alle Ports als Eingänge deklariert. Und nochwas: Die Semikola nach den geschweiften Klammern kannst du auch weglassen.
Die LED leuchtet nicht mehr ... geht aber beim betätigen des Tasters auch nicht an.... WAS kann DAS Problem sein? #include <mega8.h> void main (void) { DDRD = 0x01; //PORTD.0 Ausgang DDRB = 0xFE; //PORTB.0 Eingang PORTB.0 = 0x01; //Pullup Widerstand aktiviert while (1) { if (!(PINB & (1<<PINB.0))) //Ist PORTB.0 auf low? { PORTD.0 = 1; //Ja. LED an } else { PORTD.0 = 0; //Nein. LED aus } }; }
include <mega8.h> void main (void) { DDRD = 0x01; //PORTD.0 Ausgang PORTB.0 = 0x01; //Pullup Widerstand aktiviert while (1) { if (!(PINB & (1<<PINB.0))) //Ist PORTB.0 auf low? { PORTD.0 = 1; //Ja. LED an } else { PORTD.0 = 0; //Nein. LED aus } } }
1 | #include <io.h> |
2 | |
3 | void main (void) |
4 | {
|
5 | DDRD = 0x01; //PORTD.0 Ausgang |
6 | DDRB = 0xFE; //PORTB.0 Eingang |
7 | PORTB = 0x01; //Pullup Widerstand aktiviert |
8 | while (1) |
9 | {
|
10 | if (!(PINB & (1<<PB0))) //Ist PORTB.0 auf low? |
11 | {
|
12 | PORTD |= (1<<PD0); //Ja. LED an |
13 | }
|
14 | else
|
15 | {
|
16 | PORTD &= ~(1<<PD0); //Nein. LED aus |
17 | }
|
18 | }
|
19 | return(0); |
20 | }
|
Versuch es GENAU so dann muss es funktionieren. Wenn nicht dann...ja dann weiß ich auch nicht^^ STOP!! Wurde gerade geändert. Du hast den PullUp falsch aktiviert. AH noch mehr STOP! Das mir das alles net aufgefallen ist. Schande über mich!! Hast mal BASCOM programmiert gibs zu^^ So jetzt muss es aber stimmen.
geht leider auch nicht .....hmm was kann das bloß sein der code ist richtig oder #include <io.h> void main (void) { DDRD = 0x01; //PORTD.0 Ausgang DDRB = 0xFE; //PORTB.0 Eingang PORTB.0 = 0x01; //Pullup Widerstand aktiviert while (1) { if (!(PINB & (1<<PINB.0))) //Ist PORTB.0 auf low? { PORTD.0 = 1; //Ja. LED an } else { PORTD.0 = 0; //Nein. LED aus } } }
hab den code soweit wie möglich übernommen nur paar sachen geändert da CodeVision die sonst als fehler nennt z.B PD0 = PIND.0 oder return= (0) ganz weg weil oben steht ja void main (void) #include <io.h> void main (void) { DDRD = 0x01; //PORTD.0 Ausgang DDRB = 0xFE; //PORTB.0 Eingang PORTB = 0x01; //Pullup Widerstand aktiviert while (1) { if (!(PINB & (1<<PINB.0))) //Ist PORTB.0 auf low? { PORTD |= (1<<PIND.0); //Ja. LED an } else { PORTD &= ~(1<<PIND.0); //Nein. LED aus } } } GEHT IMMER NOCH NICHT Hilfe
Entweder indem du es bei AVR Studio einbindest und einfach Build klickst oder mit einem Makfile. Zweiteres hab ich noch nie gemacht.
Macht AVR Studio eigentlich automatisch sobald du WinAVR installiert hast. Danach brauchste nur noch ein neues Projekt zu erstellen und deinen Code reinzuschreiben.
@Vitalij K.
>DDRB = 0xFE; //PORTB.0 Eingang
Lass mal die Zeile weg, weil das Datenrichtungsregister für Eingang
nicht gesetzt werden muss soviel ich weiss.
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.