Forum: Mikrocontroller und Digitale Elektronik hilfe zur pc programmierung


von tommi (Gast)


Lesenswert?

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

von Bascomfehler (Gast)


Lesenswert?

PORTB = 0x15;             // (4)

von Karl H. (kbuchegg)


Lesenswert?

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 );

von tommi (Gast)


Lesenswert?

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...

von Karl H. (kbuchegg)


Lesenswert?

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.

von tommi (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.