Forum: Mikrocontroller und Digitale Elektronik Artikel: Absolute Beginner


von Benulba (Gast)


Lesenswert?

Hallo,

ich darf mich nun mit Mikrocontroller und deren Programmierung 
auseinandersetzen und arbeite die Beispiele hier auf der Seite durch.
Leider komme ich im Moment nicht weiter. Ich muss dazu sagen, dass ich 
keinerlei Programmier-Kenntnisse habe, bzw. gehabt habe.

Ich arbeite mit dem Atmega8. Hier der Code:

#include <avr/io.h>
#include <avr/interrupt.h>

volatile unsigned char blinkmerker=0;

ISR(TIMER1_OVF_vect)
{
  if(blinkmerker)
    blinkmerker=0;
  else
    blinkmerker=1;
          TCNT1 = 65536-488;
}


void initial(void)
{
  DDRD  = 0b00001000;

  TCCR1B = (1<<CS10)|(1<<CS12);
  TIMSK  = (1<<TOIE1);

  TCNT1  = 65536-488;
      sei();
}


int main(void)
{
  initial();

    while(1)
    {
    if (blinkmerker)
      PORTD &=~ (1<<PD3) ;
    else
      PORTD |= (1<<PD3) ;
    }
  return 0;
}


Den großen Teil konnte ich nachvollziehen. Leider hapert es beim toggeln 
des Pins. Wie hängen die if-else Anweisung in der IS-Routine und das 
toggeln in der while_Schleife zusammen?

von Achim M. (minifloat)


Lesenswert?

Benulba schrieb:
> if(blinkmerker)
>     blinkmerker=0;
>   else
>     blinkmerker=1;

if(x) bewertet x=0 als "False" und x ungleich 0 als "True".

In Pseudocode sieht das z.B. so aus:
1
Wenn (Blinkmerker ungleich 0) dann
2
    Blinkmerker = 0
3
Ansonsten
4
    Blinkmerker = 1
5
Ende Wenn

Mit jedem Timer-ISR-Durchlauf toggelt also der Blinkmerker.
In der main-while-Schleife muss nun nur noch überprüft werden, wie der 
Blinkmerker gerade steht. Abhängig davon wird eben der LED-Portpin auf 
High oder Low gesetzt.

mfg mf

von Jens (Gast)


Lesenswert?

Die If-Abfragen sind aber eigentlich sinnlos. Ein einfaches
1
blinkmerker ^= 1;
tut es auch, es invertiert einfach das Bit. Bildlicher geht auch das 
hie:
1
blinkmerker = 1 - blinkmerker;

Gruß
Jens

von Bastler (Gast)


Lesenswert?

Hallo,

ich bin auch noch ein Anfänger:

Die ganze programmiererei ist irgendwie wie Schach oder Skart :

Die eigentlichen Regeln sind nicht besonders schwer verständlich 
(eigentlich sogar recht einfach), aber die "unendlichen" 
Kombinationmöglichkeiten ,Tricks und Logik die dahinter steht ist nur 
durch Praxis, abgucken (Sourcecode anderer Programme), und mit "Schweis 
und Tränen" erlernbar bzw. besser ausgedrückt zu verinnerlichen.
Irgendwann macht es "Klick" irgendwo im Kopf und mann kann "plötzlich" 
programmieren und spricht seine "Programmiersprache".

Warum lernt mann als Erwachsener nicht mehr so wie ein Kleinkind ? - Die 
Natur ist so unfair ;-)

mfg


     Bastler

von Achim M. (minifloat)


Lesenswert?

Eine leere while(1)-Schleife in der main() und ein PORTD ^= (1<<PD3); in 
der ISR tun auch schon ihriges ;)

Ganze ausgefuchste schließen die LED an einen OCR-Portpin an und lassen 
alles die Hardware erledigen.

mfg mf

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.