hi, also wir haben in der schule eine Platine zum programmieren eines µProzessoren gemacht, via serieller schnittstelle rs232, nachdem wir nun nicht mehr zum programmieren gekommen sind, und mich dies sehr interessiert hab ich mir mal das tutorial hier angesehn, zum avr programmieren mit c... nun ich benutze einen atmel tiny13.... nun sind einige fragen aufgetreten.... also... beim Tutorial z.b. bei diesen 2 Zeilen, was bedeuten sie in einfach ausgedrückten worten, also was wird dabei gemacht. und was bedeuten bzw. was kann ich mit den werten rechts vom = ändern, also eigentlich wie.... wie muss ich nun die werte ändern... also z.b. was müsste ich machen um auf PB0 "1" auf PB1 "0" auf PB2 "1" und immer weiter bis zu PB5 zulegen.... DDRB = 0xff; // (3) PORTB = 0x03; // (4) eine weitere frage hätte ich noch.... wie kann ich mir einen wert in der for schleife errechnen, dass diese schleife genau z.b. 10sec durchläuft.... also ich hoffe dass ich meine probleme halbwegs verständlich beschrieben habe....und hoffe auf ne schnelle antwort :) mfg
tommi wrote: > hi, also wir haben in der schule eine Platine zum programmieren eines > µProzessoren gemacht, via serieller schnittstelle rs232, nachdem wir nun > nicht mehr zum programmieren gekommen sind, und mich dies sehr > interessiert hab ich mir mal das tutorial hier angesehn, zum avr > programmieren mit c... > > nun ich benutze einen atmel tiny13.... > nun sind einige fragen aufgetreten.... > > also... > beim Tutorial z.b. bei diesen 2 Zeilen, was bedeuten sie in einfach > ausgedrückten worten, also was wird dabei gemacht. und was bedeuten bzw. > was kann ich mit den werten rechts vom = ändern, also eigentlich wie.... > wie muss ich nun die werte ändern... > > also z.b. was müsste ich machen um auf PB0 "1" auf PB1 "0" auf PB2 "1" > und immer weiter bis zu PB5 zulegen.... > > DDRB = 0xff; // (3) > PORTB = 0x03; // (4) Pfriemel das mal in Bits auf PORTB wird zugewiesen 00000011 ganz rechts ist PB0, eine Stelle weiter links PB1 usw. wie konnteich so schnell die Bitrepräsentierung angeben. Nun, ich kann die Bitdarstellung für Hexadizmale Ziffern auswendig (und du in 2 Tagen auch) 0000 0 1000 8 0001 1 1001 9 0010 2 1010 A 0011 3 1011 B 0100 4 1100 C 0101 5 1101 D 0110 6 1110 E 0111 7 1111 F Du willst PB0 auf 1, PB2 auf 0, PB3 auf 1, PB4 auf 0, PB5 auf 1 also das Muster 00010101 teile das in 2 4-Bit Blöcke auf 0001 0101 und hol dir aus der obigen Tabelle die korrespondierenden Hex-Ziffern 1 5 PORTB = 0x15; macht also das Gewünschte. In ein paar Tagen hast du den Bogen raus und du 'siehst vor deinem geistigen Auge' welche Bits bei 0x15 auf 1 sind und welche auf 0 > eine weitere frage hätte ich noch.... > wie kann ich mir einen wert in der for schleife errechnen, dass diese > schleife genau z.b. 10sec durchläuft.... Sowas macht man nicht mehr mit einer Schleife. Aber seis drum. Um zu warten gibt es die _delay_ms Funktion (siehe AVR gcc Tutorial). Die wartet x Millisekunden lang. 1 Sekunde hat 1000 Millisekunden, 10 Sekunden sind daher 10000 Millisekunden. _delay_ms( 10000 );
ok, nochmal zu den stellen in binär mit rechts pb0 usw. hab ich immer nur so viele stellen wie Ausgangsports.... also im fall des atmel tiny13 pb0- pb4 also hab ich dann 5 binär stellen oder gibts da ne genormte anzahl z.b. 2er potenzen oder sowas...
tommi wrote: > ok, nochmal zu den stellen in binär mit rechts pb0 usw. > > hab ich immer nur so viele stellen wie Ausgangsports.... > also im fall des atmel tiny13 pb0- pb4 > also hab ich dann 5 binär stellen oder gibts da ne genormte anzahl z.b. > 2er potenzen oder sowas... Es sind immer 8 Ein Byte besteht aus 8 Bit Allerdings kanns natürlich sein, dass nicht alle Bits auf einen Anschluss herausgeführt werden.
also ich hab jetzt nur mal zum testen die 2 befehle kombiniert... und das sieht so aus... #include <avr/io.h> #include <avr/delay.h> void main(void) { DDRB=0xff; while(1) { PORTB = 0x02; _delay_ms(150); PORTB = 0x10; _delay_ms(150); } } jedoch wenn ich es teste passiert rein gar nichts.... habe ich irgendwo einen fehler? oder gibt es einen grund warum es nicht funktioniert? eine frage hätte ich noch zum thema delay wenn ich den delay wie man oben sieht setze stoppt wird der zustand der in der zeile darüber ist genau z.b. 150ms durchgeführt..? also ich hoffe ihr könnt mir helfen mal meinen test zum laufen zu bringen :) mfg
Da das hier absolut nichts mit PC-Programmierung zu tun hat, verschiebe ich’s mal.
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.