Forum: Mikrocontroller und Digitale Elektronik Atmel Studio, µC Grundlagen Hilfe


von Micha S. (otacon2002)


Lesenswert?

Hallo zusammen,

in der Schule haben wir mit dem Thema µController angefangen, vorher 
hatten wir C Programmieren.
Wir arbeiten mit dem Atmel Studio 6.2 und einem AVT STK500 Board. Wir 
haben eine Aufgabenstellung bekommen, die es zu lösen gilt:

"Erstellen Sie ein Programm derart, dass LED D12 leuchtet, wenn Taster 1 
gedrückt ist und ausgeschaltet ist, wenn Taster 1 nicht gedrückt ist. 
LED D11 soll zu LED D12 invertiert leuchten."

In den vorherigen Stunden haben wir darüber gesprochen Pin B 0 als 
Taster einzulesen und Port C 3 als Ausgabe in gleicher Logik 
einzusetzen.

bisher haben wir folgendes "programmiert", wobei dies nicht unbedingt 
zur Aufgabe gehören muss:
1
#include <avr/io.h>
2
3
void init_mcu()
4
{
5
  PORTC = 0b11111111;
6
  DDR_C = 0b11111111;
7
}
8
9
int main(void)
10
{
11
      
12
   init_mcu();
13
   
14
   while(1)
15
   {
16
     if(PINB & (1<<PB0)==0)  //PINB wird abgefragt, wenn bei PB0 eine 0 anliegt, wird die if verzweigung gestartet
17
     {
18
       PORTC = PORTC | (1<<PC3); // PORTC wird ODER verknüpft mit PC3
19
    
20
     }
21
     
22
   } //while
23
   
24
   
25
   
26
} //main
Bitte kann mir jemand die einzelnen Parameter zu dieser Aufgabe erklären 
und mir einen Lösungsvorschalf unterbreiten??

Danke
Otacon2002

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Micha Sch schrieb:


Du solltest mal ernsthaft mit deinem Lehrer sprechen. Vielleicht hast du 
auch einen Mitschüler, der ein wenig schneller ist

>    while(1)
>    {
>      if(PINB & (1<<PB0)==0)  //PINB wird abgefragt, wenn bei PB0 eine 0
> anliegt, wird die if verzweigung gestartet
>      {
>        PORTC = PORTC | (1<<PC3); // PORTC wird ODER verknüpft mit PC3
>
>      }

Hier steht im wesentlichen
'Wenn der Taster gedrückt ist ... dann schalte die LED ein'

(kann auch sein, dass das die LED ausschaltet, je nachdem wie euer 
Entiwkclungsboard aufgebaut ist.)

Deine genaue Aufgabe verlangt von die eine Modifikation
'Wenn der Taster gedrückt ist ... dann schalte die LED ein ... 
andernfalls schalte die LED aus'

Das sollte sich doch machen lassen.
Übrigens: dein Kommentare ... die solltest du so wie du sie geschrieben 
hast weglassen. Denn die sagen nichts aus. In deinen Kommentaren hast du 
nur in Deutsch hingeschrieben, was sowieso schon im Programmtext steht. 
Das hilft niemandem. (Mal abgesehen davon, dass ein paar davon sogar 
falsch sind, weil du den C Code eben nicht richtig in Deutsch formuliert 
hast. Wenn schon dann solltest du so kommentieren
1
...
2
    while(1)
3
    {
4
       // Wenn die Taste gedrückt ist (Pin PB0 liefert dann ein 0 Bit) ...
5
       if(PINB & (1<<PB0)==0)
6
       {
7
         // .... dann schalte die LED ein, in dem das Bit PC3
8
         //      auf 1 gesetzt wird
9
         PORTC = PORTC | (1<<PC3);
10
       }
11
12
       else
13
       // andernfalls (dann liefert der PIN PB0 ein 1 Bit und die Taste
14
       // ist daher nicht gedrückt) ....
15
       {
16
         // .... die LED abschalten, in dem das Bit PC3 auf
17
         //      auf 0 gesetzt wird
18
19
         xxxxxx
20
       }
21
   }
22
}
Bei xxxxx setzt du jetzt die Bitoperation ein, die genau das macht, was 
im Kommentar darüber gefordert wird.

Bitmanipulation

Verlgeich mal deine Kommentare mit meinen. Deine Kommentare erzählen 
nicht WARUM etwas gemacht wird. Du beschreibst hier
1
             PORTC = PORTC | (1<<PC3); // PORTC wird ODER verknüpft mit PC3
das PORTC ODER verknüpft wird. Und zwar mit PC3. Aber warum machst du 
das? Was ist der Zweck der Übung? Das da eine Oder Verknüpfung im SPiel 
ist, das kann ich auch im COde sehen. Genau das ist die Bedeutung des 
'|'. Der senkrechte Strich repräsentiert die Oder Verknüpfung in C. Das 
brauchst du nicht im Kommentar beschreiben. Das kann jeder sehen, der 
auch nur die banalsten Grundlagen der C Programmierung auf einem µC 
hinter sich hat. Was aber viel mehr interessiert: WARUM wird diese 
Operation gemacht? Was wird damit bezweckt? Was passiert da mit dem 
Ausgangspin und was bedeutet das zb für eine LED (oder für einen Motor 
oder ....). Das sind die Dinge, die du kommentieren sollst.
Grundregel: Im Kommentar steht das WARUM, im Code steht das WIE

: Bearbeitet durch Moderator
von Micha S. (otacon2002)


Lesenswert?

Hi,

danke schonmal.
Ja das mit dem Kommentaren..da hast du recht. Das war nur mitgeschrieben 
wie der das erklärt hat.

Hab mir das Tutorial runtergeladen und werde es mal durchlesen.
Bin aber schon weiter als vor 2 Stunden :)

Danke

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.