Hallo, Habe eine Frage. Und zwar experimentiere ich mit einem Atmel Controller: dem ATMega16. Ich programmiere in C. Ich habe nun vor etwas anzusteuern. Ich muss dafür die Pins bzw. die Ports auf Ausgang schalten. Hierzu setze ich erstmal das DDR auf Ausgang. Nun möchte ich zum Beispiel, dass der Pin 1 am Port B, also PB0 den Namen RNW trägt. D.h. ich möchte soetwas in der Art machen: DDRB = 0xff; //Definiere das Pin 1 am Port B, also die Adresse 0x01 den Namen RNW trägt. RNW = (PORTB = 0x01); Hmm dass sieht irgendwie nicht so aus, als würde es klappen .. denke ich muss hier mit einem Zeiger arbeitenm, weil ich ja auf die Adresse zeige.. Mein Ziel ist es nachher im Programm einfach zu schreiben ... for(i =0, i < 5, i++) { Setze RNW; } ... Will also nicht immer die Adresse des Pins angeben. das hat den Sinn, dass wenn ich meine Einheit die ich steuern will verbaue nicht auf die richtige verdrahtung achten muss, sondern diese im Kopf schnell anpassen kann, sprich NRW eine neue/andere Adresse einmalig zuweisen kann. Kann mir da wer weiter helfen .. Danke
du kannst #define set_RNW PORTB |= (1<<PB0) machen... Dann kannst du einfach set_RNW; schreiben und am PORTB wird der Pin PB0 gesetzt...
Habe nun folgendes übersetzt: #include <avr/io.h> #define set_RNW PORTB = 0x01; void main () { DDRB = 0xff; set_RNW; return 0; }; Ich schaue mir mit dem Debug die Register an: Zunächst dass DDRB Register ... es werden alle 8 Bits gesetzt nach der Zeile DDRB=0xff; Nun wird nach der zeile das erste Bit im Register PORTB gesetzt. Okay bis da verstehe ich es. Es läuft wie ich es will. Nun nach dem Anweisungsblock wird plötzlich auch das 1. Bit im Register PINB gesetzt, aber wieso? dass heißt dann doch sowas wie eingabe
>Nun wird nach der zeile das erste Bit im Register PORTB gesetzt. >Okay bis da verstehe ich es. Es läuft wie ich es will. >Nun nach dem Anweisungsblock wird plötzlich auch das 1. Bit im Register >PINB gesetzt, aber wieso? dass heißt dann doch sowas wie eingabe Das ist völlig normal. Wenn PORTB0 ein Ausgang ist wird der Zustand des Pins auch immer in PINB0 auftauchen. Also wenn du PORTB0 auf 1 setzt wird auch PINB0 1. Es sei denn du schliesst den Ausgang kurz gegen Masse ;)
At wrote:
> Setze RNW;
So geht es auf keinen Fall.
Bitvariablen muß man einen Wert zuweisen, also
1 | RNW = 0; |
2 | ..
|
3 | RNW = 1; |
Wie man Portpins als Bitvariablen definiert, steht hier: http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=67368 Und ein praktisches Beispiel: http://www.mikrocontroller.net/attachment/30300/lcd_drv.zip Peter
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.