Forum: Mikrocontroller und Digitale Elektronik Leichte Grundlagen-Fragen an AVR-C Programmierer


von Jakov K. (jackenkoffer)


Lesenswert?

Hallo !
ich bin ein newbie in C-Programmierung, und möchte euch ein Paar fragen 
stellen, die ihr mit leichtigkeit Beantworten könnt.

1.Frage : Warum leuchtet die LED die ich am PORTD7 angeschlossen habe 
nicht, wenn ich den Taster an PINB0 drücke ?
Quellcode:
#define F_CPU 4000000UL
#include <avr/io.h>

int main(void)
{
  DDRD = (1<<7);
  DDRB = (0<<PB0);
  PORTB = (1<<PB0);

  while(1);
  {
    if(bit_is_clear(PINB,PB0))
    {
      PORTD = (1<<7);
    }
    else
    {
      PORTD = (0<<7);
          }
  }
  return(0);
}

2.Frage :
Im PDF des "AVR-GCC-Tutorial_-_www_mikrocontroller_net.pdf" steht auf 
seite 21 im Quelltext:

"inline uint8_t debounce(volatile uint8_t *port, uint8_t pin) "

was ist diese Funktion "inline" und was heißt "volatile" ?

außerdem :
typedef union {
        uint16_t i16;
          struct {
                  uint8_t i8l;
                  uint8_t i8h;
                 };
               } convert16to8;
und was heißt "typdef union" ?

und:

uint8_t key_pressed(const volatile uint8_t *inputreg, uint8_t inputbit)
{
static uint8_t last_state = 0;

was heißt "const volatile" und was heißt "static uint8_t"

wenn ihr noch ( andere ) tutorials und gute links parat habt, ich Wäre 
dankbar, wenn ihr sie hier posten würdet.

Gruß ,
Jakov

von Oliver J. (skriptkiddy)


Lesenswert?

Jakov K. schrieb:
> 1.Frage : Warum leuchtet die LED die ich am PORTD7 angeschlossen habe
> nicht, wenn ich den Taster an PINB0 drücke ?
Wie ist der Taster denn angeschlossen?

Gruß Oliver

von Cyblord -. (cyblord)


Lesenswert?

Weil du Konstrukte wie:
> 0<<7

verwendest? Was glaubst du was dies tut?

von Jakov K. (jackenkoffer)


Lesenswert?

vom pin zu gnd
ohne pullup widerstand, aber den habe ich ja aktiviert :D
MFG jakov

von Lutz (Gast)


Lesenswert?

Wie ist die LED denn angeschlossen?

von Jakov K. (jackenkoffer)


Lesenswert?

soweit ich es verstanden habe:
es "verschiebt" die null 7 mal nach "links" , d.h, an pinx7 ?!

wenn du schon so fragst , dann wird es wohl falsch sein :D
wie ist es denn richtig  ?

von Jakov K. (jackenkoffer)


Lesenswert?

Die LED ist vom Port über einen Vorwiderstand direkt zu gnd.

noch was nebenbei : ich habe mit basic ( Bascom) angefangen zu 
Programmieren, aber die Demoversion hat mir nicht ausgereicht, deswegen 
steige ich auf C um.
mit der schaltungstechnik müsste alles stimmen ;)

von Cyblord -. (cyblord)


Lesenswert?

Jakov K. schrieb:
> soweit ich es verstanden habe:
> es "verschiebt" die null 7 mal nach "links" , d.h, an pinx7 ?!
>
> wenn du schon so fragst , dann wird es wohl falsch sein :D
> wie ist es denn richtig  ?

Also, in deinem Code tut es was du willst. Aber es zeigt du hast keine 
Ahnung. Es rotiert die Binärzahl 00000000 um 7 stellen nach links. Also 
steht am Ende wieder 0000000. Ergo, kannst auch weglassen und direkt 
PORTD=0 schreiben.
(1<<7) macht natürlich wieder sinn, aber eher (1<<PB7), dann wird sofort 
klar du tun willst.

Grundsätzlich ist dein Programm richtig, also liegts an der Hardware.

von Ingo L. (Gast)


Lesenswert?

Für die anderen Fragen schaust du besser in ein C-Büchlein rein.
Aber deine LED sollte, auch wenn der Code Mist ist, trotzdem mal 
leuchten.


Ingo

von Cyblord -. (cyblord)


Lesenswert?

Und das "C-Büchlein" könnte dies hier sein: 
http://openbook.galileocomputing.de/c_von_a_bis_z/

von Jakov K. (jackenkoffer)


Lesenswert?

wo kriege ich denn ein solches " C-Büchlein" her ?  hast du einen 
schönen link ? oder eine Empfehlung ?

von Ingo L. (Gast)


Lesenswert?


von Nils ‫. (n-regen)


Lesenswert?

Der Fehler im ersten Quelltext ist klein, aber wirksam:
Es muss
1
while(1)
 heißen, nicht
1
while(1);
Letzteres heißt nämlich in Worten "solange 1 gleich 1 ist, führe 
folgende Anweisung aus: ';' ". Das, was nach dem Strichpunkt kommt, wird 
nie ausgeführt, weil der Mikrocontroller in einer Endlosschleife die 
leere Anweisung ; ausführt.
Lässt du den Strichpunkt weg, ist die erste Anweisung nach dem while 
dein Teil in {}, also das, worauf sich das while eigentlich beziehen 
soll.

von Jakov K. (jackenkoffer)


Lesenswert?

daaankeschön !
wieder was dazugelernt :D
merci !

Leider habe ich momentan kein solches c-Büchlein ...
gibt es pdf's wo sowas drinsteht ?
oder i-welche internetseiten ?

Danke im Voraus !
Jakov

von Achim M. (minifloat)


Lesenswert?


von Jakov K. (jackenkoffer)


Lesenswert?

gut, dankeschön, da bin ich auch schonmal draufgestoßen ;)
ich meine "mal was anderes" ..
naja, ich werde mich erstmal mit dem beglücken müssen :D

von Nils ‫. (n-regen)


Lesenswert?

Für dich wahrscheinlich auch interessant: Bitmanipulation

von Cyblord -. (cyblord)


Lesenswert?

Jakov K. schrieb:
> daaankeschön !
> wieder was dazugelernt :D
> merci !
>
> Leider habe ich momentan kein solches c-Büchlein ...
> gibt es pdf's wo sowas drinsteht ?
> oder i-welche internetseiten ?
>
> Danke im Voraus !
> Jakov

Mein Link verweist auf ein open book von galileo. das ist komplett 
online zu lesen.

von Peter (Gast)


Lesenswert?

Wen Du GOOGLE bemühst findest Du massenhaft C / C++ Toturials oder 
Reference Guides...

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.