TCCR2B = 0x04; // Set Prescaler to 64 and start Timer (CS22:0 to 4)
57
58
sei(); // Enable interrupts
59
60
/**
61
* Main Loop
62
*/
63
64
while ( 1 ) {
65
switch ( state ) {
66
case 0:
67
if ( !counter0 ) {
68
PORTB = 0x00;
69
PORTC = 0x00;
70
PORTD = 0x00;
71
state = 1;
72
counter0 = 1000;
73
}
74
break;
75
case 1:
76
if ( !counter0 ) {
77
PORTB = 0x3F;
78
PORTC = 0x3F;
79
PORTD = 0xFF;
80
state = 0;
81
counter0 = 1000;
82
}
83
break;
84
} // switsch
85
} // while
86
//return;
87
} // main
Im Grunde ist das Programm ziemlich klar, auch wenn ich vieles noch
nicht richtig verstehe.
Das Programm soll ein Testprogramm für µC sein das die Ports B,C,D
einfach blinken lässt. Dies funktioniert auf einem ATMega88 auch
einwandfrei.
Komischerweise aber nicht auf einem ATMega8.
Und das ist meine Frage. Warum nicht ?
Der Timer2 hat beim Mega8 andere Register. Es gibt z.B. kein
TIMER2_COMPA_vect, das heißt hier TIMER2_COMP_vect.
Schau mal ins Datenblatt der beiden.
gruss
f
Auwei, Ihr seid lustig. Nicht schwer ? Das hätte ich NIE gefunden.
Das Beste wird sein ich konzentriere mich mit meiner programmiererei
dann wohl erst mal nur auf einen AVR. Sagen wir mal den ATMega8.
Auch mit dem programmieren hapert es gewaltig. Ich habe zwar schon x
Bücher hier liegen, aber irgendwie komme ich bei allen irgendwie nicht
wirklich weiter. Ich finde einfach keinen richtigen Anfang.
Ein popeliges "Hello world" bringt mir nicht viel wenn ich keinen Plan
von AVRs habe.
Gibt es nicht ein gescheites Buch in dem man gleichzeitig C und etwas
über AVRs lernen kann ?
Mir kommt es so vor, als wäre das Programmieren eines µC eine völlig
andere "Sprache" als ein Programm für den Computer zu schreiben.
Jemand eine Empfehlung für ein Buch, etwa nach dem Motto "AVR & C für
Dummies" welches auch halbwegs aktuell ist ?
Preis ist erst mal Nebensache.
Optimal wäre natürlich wenn es gleich für WinAVR abgestimmt ist, denn
wie ich feststellen musste, gibt es je nach Compiler, auch wieder
etliche Unterschiede, in der Programmierung.
Das Datenblatt des entsprechenden Controllers ist dein bester Freund.
Wenn man die PC-Programmierung gewohnt ist, dann ist es wohl recht
schwer zu lesen. Vor allem, weil du bei vielem nicht weißt, wofür ist
das überhaupt, was sollst du damit anfangen?
Da gibt es nur eines: Immer wenn du etwas mit dem Controller machst,
dann liest du dir das entsprechende Kapitel im Datenblatt durch. (z.B.
Timer und Ports als general in and output) Wenn du weißt was du damit
machen willst ist der entsprechende Teil plötzlich viel verständlicher.
(ok, am Anfang immer noch nicht leicht zu lesen)
http://atmel.com/dyn/products/product_card.asp?part_id=4585
Wenn du links in der Navigationsleiste auf AVR klickst, dann tun sich
dort völlig neue Möglichkeiten auf, wie z.B. das AVR-gcc-Tutorial und
das AVR-Tutorial.
Gast schrieb:
> Auwei, Ihr seid lustig. Nicht schwer ? Das hätte ich NIE gefunden.
Du bist lustig...wenn man ein Programm von einem µC auf einen anderen µC
portieren will, muss man sich schon mit den Datenblättern beschäftigen.
Zufälligerweise gibt es ja sogar von Atmel eine AppNote "Replacing
ATmega8 by ATmega88"...
> Gibt es nicht ein gescheites Buch in dem man gleichzeitig C und etwas> über AVRs lernen kann ?
ist imho Mist. Erst C (oder überhaupt Programmieren lernen), dann sich
mit µC und der zugehörigen Elektronik beschäftigen, und erst dann beides
zusammen bringen...
> Mir kommt es so vor, als wäre das Programmieren eines µC eine völlig> andere "Sprache" als ein Programm für den Computer zu schreiben.
Nö. Aber am µC greift man eben wirklich auf die Hardware zu, was am PC
doch recht selten ist...
> Jemand eine Empfehlung für ein Buch, etwa nach dem Motto "AVR & C für> Dummies" welches auch halbwegs aktuell ist ?> Preis ist erst mal Nebensache.
Ich hatte mir am Anfang "AVR Hardware und C-Programmierung in der
Praxis" zugelegt, wobei das Tut auf der Seite hier eigentlich ausreicht.
Wer allerdings von C keinen Peil hat, der wird mit beiden nicht
zurechtkommen. Wie ich schon oben geschrieben hab: Erst C/Programmieren
lernen, dann zu µC wechseln...
Nachtrag: Es gibt noch "Mikrocomputertechnik mit Controllern der Atmel
AVR-RISC-Familie", was auch etwas auf die Grundlagen von C eingeht...
> Das Beste wird sein ich konzentriere mich mit meiner> programmiererei dann wohl erst mal nur auf einen AVR. Sagen wir> mal den ATMega8.
Dass mag hilfreich sein. Aber jeden Fall solltest du nicht gleich mit
der Portierung eines Programms von einem AVR auf einen anderen anfangen.
Wenn du ein existierendes Programm hast, das du als Basis verwenden
willst, nimm erstmal den AVR, für den es geschrieben wurde.
>Gibt es nicht ein gescheites Buch in dem man gleichzeitig C und> etwas über AVRs lernen kann ?
Also kannst du C noch nicht. Dann ist ein Mikrocontroller allerdings
nicht unbedingt für den Einstieg geeignet. Alles, was man beim
C-Einstieg so braucht, gestaltet sich auf einem µC erstmal deutlich
umständlicher, als direkt auf dem PC.
> Mir kommt es so vor, als wäre das Programmieren eines µC eine> völlig andere "Sprache" als ein Programm für den Computer zu> schreiben.
Wenn du vorher den PC in einer völlig anderen Sprache als C
programmiert hast, dann ist es tatsächlich eine völlig andere Sprache,
mit der du jetzt den µC programmierst. ;-)
Danke für die vielen hilfreichen Antworten.
Dann werde ich mir mal dieses Buch besorgen und die ganzen Tutorials
lesen. Wenn ich die Hardware erst mal verstanden habe, geht das mit dem
C auch leichter, davon bin ich überzeugt.
Mit dem Programm oben experimentiere ich aber trotzdem noch rum
zwinker
Du solltest tatsächlich den Rat in Erwägung ziehen, deine ersten
Schritte in C auf einem PC mit einem Standard-C-Lehrbuch (zum Beispiel
dem berühmten Kernighan&Ritchie) zu machen.
Das hat den Vorteil, dass du dich zunächst nicht um die vielen kleinen
Details kümmern musst, die einem auf einem µC das Leben schwer machen.
Das Hello World der µC Szene ist eine blinkende LED.
AUf einem PC ist aber das erste Standardbeispiel
1
#include<stdio.h>
2
3
intmain()
4
{
5
printf("Hallo world\n");
6
}
und das funktioniert auf jedem PC, egal ob der unter Windows oder Linux
oder OS/X oder sonst irgendeinem Betriebssystem läuft. Das funktioniert
auf PC, Minicomputer, bis hin zu Grossrechnern und Numbercrunchern.
Solange eine Alpha-Ausgabeeinheit existiert, kann man mit printf dort
etwas ausgeben. Wenn es eine GUI gibt, kann man davon ausgehen, dass
sich die C-Bibliothek darum kümmert, dass da ein Fenster aufgeht, in
welchem der Text ausgegeben wird, oder dass es zumindest sowas wie eine
Command-Line Fenster gibt, von dem aus man das Programm starten kann und
in dem dann die Ausgabe erfolgt.
-> Dein Standard-C-Lehrbuch wird dir zu fast 100% eine Hilfe in der
Programmierung sein. Dort programmierst du wirklich einfach nur C und
nicht C mit dem zusätzlichen Handicup, dass die die Hardware auch noch
in die Suppe spucken kann.