Hallo, Ich versuche folgenden Aufbau zum laufen zu bringen. (Dies ist mein erster AVR Versuch - bitte um Geduld). Moechte mittels AVR Erdfeuchtigkeit messen. Je nach Feuchtigkeitswert soll dann eine LED leuchten. Bevor ich weitermache, moechte ich nur mal wissen ob ich die Ein- und Ausgaenge richtig inititializiert habe. Wuerde mich freuen wenn mir jemand sagen koennte ob ich auf dem richtigen Weg bin. Danke. Gruss Michael /* ATtiny13v /* GND | R1 | /--------+ LED1 1 5---VCC | | | +PB3---2 6---PB2---LED2---R2----GND | | 3 7 +-------Nail ~~~ Nail+---VCC (5V) | | | GND---4 8--PB0-+ +--------+ | R3 | GND LED1 = RED LED2 = GREEN R1,R2 = 220 OHM R3 = 10k OHM */ #include <avr/io.h> // (1) int main (void) { // (2) // set PB0 as input and PB2 and PB3 as output DDRB &= ~( (1<<PB0) | (0 << PB2) | (0 << PB3)); // (3) while(1) { // (5a) } // (5c) return 0; // (6) }
nein, die pins sind nicht richtig eingestellt. dazu lies dir mal folgenden abschnitt im tutorial durch: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Datenrichtung_bestimmen
Hallo, ich würde das so machen: [c] */ #include <avr/io.h> // (1) int main (void) { // (2) // set PB0 as input and PB2 and PB3 as output // DDRB |= (1 << PB2) | (1 << PB3) //(alternativ könnte man hier auch schnell einfach alle zunächst als Ausgang deklarieren, dann die Eingänge expliziet setzen) //Ausgänge setzen, diese sähe dann wie folgt aus: //DDRB = 0xFF // zunächst alle als Ausgänge schalten) // nur wir der Eingang gesetzt, indem gezielt das Bit gelöscht wird DDRB &= ~( 1 << DDB0 ); // PB0 gezielt als Eingang setzen while(1) { // (5a) } // (5c) return 0; // (6) }
Hallo, danke fuer die Hilfe. Nun, ich habe es wie folgt uebernommen. Es faellt mir einfach ziemlich schwer (4) zu verstehen. Die Methode (4a) ist da schon einfacher. Frage: Spricht irgendwas dagegen, alle meine Bitmanipulationen mittels (4a) Methode durch zu fuehren? Beim ATtiny13v kann ich doch alle Ports fuer das messen eines Analogen Wertes verwenden, oder? Gruss Michael #include <avr/io.h> // (1) int main (void) { // (2) DDRB = 0xFF; // (3) Declare all pins on Port B as output // DDRB &= ~( 1 << DDB0); // (4) Set Pin 0 as input DDRB = 0b00000001; // (4a) same as 4 but easier to understand while(1) { // (5a) } // (5c) return 0; // (6) }
Michael M. schrieb: > Hallo, danke fuer die Hilfe. Nun, ich habe es wie folgt uebernommen. Es > faellt mir einfach ziemlich schwer (4) zu verstehen. Die Methode (4a) > ist da schon einfacher. > > Frage: Spricht irgendwas dagegen, alle meine Bitmanipulationen mittels > (4a) Methode durch zu fuehren? ja! Es ist unübersichtlicher, de Code ist schwerer zu Portieren, wenn du hier Fragen hast und in deinem Code deine Einstellungen mit (4a) machst, werden viele dir nicht helfen wollen... und vor allem: (4) und (4a) sind nicht gleich, und das gleich doppelt...
Justus Skorps schrieb:
> und vor allem: (4) und (4a) sind nicht gleich
Ich bin heute mal wieder sehr nett:
DDRB &= ~( 1 << DDB0);
DDRB = DDRB & ~(1 << DDB0);
DDRB = DDRB & ~(1 << 0);
DDRB = DDRB & ~(1);
DDRB = DDRB & ~(0b00000001);
DDRB = DDRB & 0b11111110;
DDRB &= 0b11111110;
Das ist alles gleichwertig (hoffentlich ;-)
Ach ja, noch etwas: 0b11111110 versteht nicht unbedingt jeder Compiler.
Hallo, herzlichen Dank fuer die Details ich muss das ganze mal verdauen. :- ) Gruss Michael
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.