@all, ich habe bis jetzt mit Keil programmiert und bin jetzt AVR Studio mit WINAVR umgestiegen. Nun habe ich aber etwas Probleme mit der Programmierung. Ich programmiere in C und wenn ich bei Keil einen Ausgang einlesen bzw. ausgeben wollte musse ich diesen zuerst deklarieren ( sbit P1.1 = 0x..) nun konnte ich im Programm den PIN auslesen if(P1.1==0){...}. Setzen konnte ich den PIN mit P1.1=1; Hier im Forum habe ich zwar schon c-code gesehen jedoch ist mir dieser etwas unklar da ich bis jetzt mit << immer die Werte verschoben habe. Mir scheint, dass der Befehlsatz beim AVR ein anderer ist. Kann mir jemand ein Online Beschreibung empfehlen oder ein Buch! Wenn es von AVR Studio bzw. WINAVR eine Doku gibt bitte die Adresse einfügen da ich bis jetzt nicht gefunden habe. Software AVR Studio mit WINAVR Hardware MEGA128 wenns wichtig ist. TOM
Nimm das AVR-Tutorial hier aus dem Wiki. Ja, die AVRs arbeiten anders. Es fängt damit an, dass sie push-pull-Ausgänge haben (nicht nur pulldown mit einem pullup- Widerstand), sodass man zuvor erst einmal das Pin auf Ausgang setzen muss. Kurz: setze Pin B0 auf Ausgang, belasse Pin B1 auf Eingang (das ist der Reset-Zustand), und kopiere den negierten logischen Wert von B1 nach B0:
1 | #include <avr/io.h> |
2 | |
3 | int
|
4 | main(void) |
5 | {
|
6 | DDRB = (1 << 0); // B0 ist Ausgang |
7 | for (;;) { |
8 | if (PINB & (1 << 1)) // Abfrage Eingang B1 |
9 | PORTB &= ~(1 << 0); // Löschen Augang B0 |
10 | else
|
11 | PORTB |= (1 << 0); // Setzen Ausgang B0 |
12 | }
|
13 | }
|
schau mal hier, dann kannst du das so machen wie gewohnt. Beitrag "sbit macro für avr-gcc" Gruß Volker
@Jörg, danke für die Schnelle Antwort. Ich habe mit das AVR-Tutorial schon angesehen jedoch ist alles in Assembler geschrieben und erklärt. Ich kann zwar auch etwas Assembler jedoch für um die Beispiele zu verstehen müsste ich mich erst wieder einarbeiten und das nur weil ich eigentlich in C programmieren will. Gibt es nicht eine anleitung wo die Grundlegenden Dinge anhand von Beispielen beschrieben ist. So wie im AVR-Tutorial nur in C eben. DDRB = (1 << 0); // B0 ist Ausgang --> ist klar for (;;) { if (PINB & (1 << 1)) // Abfrage Eingang B1 -->ich verknüpfe den PINB(8Bit) mit der Maske 0b00000010 wobei die zweite "1" fur die Wertigkeit steht! ((1 << 4) Abfrage PINB4 ist 1) Ist das richtig? PORTB &= ~(1 << 0); // Löschen Augang B0 --> ich verknüpfe den PORTB(8Bit) mit 0b00000001 plus invertierung Ausgang wird HIGH --> LED geht AUS else PORTB |= (1 << 0); // Setzen Ausgang B0 -->ich verknüpfe den PORTB((8Bit) mit 0b00000001 setze Ausgang auf LOW --> LED geht AN } Ist irgentwo die Syntax grunglegend beschrieben Internetadresse?!?!? Sind die Port Register im gegensatz zum 80c535 nicht Bitadressierbar? Warscheinlich nicht daher immer die Maskierung. TOM
> So wie im AVR-Tutorial nur in C eben. wie im AVR-GCC Tutorial vielleicht? http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial :-o Jörg
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.