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