Forum: Mikrocontroller und Digitale Elektronik C Programm, kleine Frage


von Gast (Gast)


Lesenswert?

Hallo

vorweg habe ich gerade mit C und µC angefangen und mich jetzt mal etwas 
weiter aus dem Fenster gelehnt.

Ich habe folgendes Programm gefunden.
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
4
volatile unsigned short counter0 = 0;
5
6
ISR(TIMER2_COMPA_vect) {
7
  if ( counter0 ) { // counter0 != 0
8
    counter0--;
9
  }
10
}
11
12
void  main( void ) {
13
  
14
  unsigned char state = 0;
15
  
16
  /**
17
   * INIT
18
   */
19
  
20
  /*
21
   * Port B
22
   */
23
  
24
  //PORTB = 0x00;
25
  DDRB = 0x3F;  // Set BIT0:5 B as Output
26
  
27
  /*
28
   * Port C
29
   */
30
  
31
  // PORTC = 0x00;
32
  DDRC = 0x3F;  // Set BIT0:5 C as Output
33
  
34
  
35
  /*
36
   * Port D
37
   */
38
39
  //PORTD = 0x00;
40
  DDRD = 0xFF;  // Set BIT0:4 D as Output
41
42
  /*
43
   * Timer2
44
   */
45
46
  /* Set Timer to CTC MODE (WGM22:0 to 2); Stop Timer (CS22:0 to 0) */
47
  //TCCR2B = 0x00;
48
  TCCR2A = 0x02;
49
50
  //TCNT2 = 0x00;  // Set Timer counter to 0
51
  OCR2A = 0xFA;  // Set Compare Register A to 250
52
  //OCR2B = 0x00;  // Set Compare Register B to 0
53
54
  TIMSK2 = 0x02;  // Interupts: Disable TIMER2_COMPB; Enable TIMER2_COMPA; Disable TIMER2_OVF
55
56
  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 ?

von Frank L. (florenzen)


Lesenswert?

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

von Jean P. (fubu1000)


Lesenswert?

Hi,
nicht wirklich schwer.
Datenblatt vom Atmega8 runterladen. Die Pins sind zwar identisch zum 
Atmega88, jedoch die Register heissen anders.

Gruß.

von Gast (Gast)


Lesenswert?

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.

von Horst (Gast)


Lesenswert?

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.

von Justus S. (jussa)


Lesenswert?

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...

von Steffen A. (stigmer)


Lesenswert?

guckst du hier:
http://www.mikrocontroller.net/articles/AVR-Tutorial

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

herrlich, diese beiden links wollte ich schon immer mal hier posten :D

von Rolf Magnus (Gast)


Lesenswert?

> 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. ;-)

von Peter (Gast)


Lesenswert?

Ich empfehle Dir sehr, Dich einfach fleissig durch die Tutorials auf 
dieser Seite zu arbeiten. Innert 2..3 Tagen wirst Du dabei schon sehr 
viel gelernt haben.

http://www.mikrocontroller.net/articles/AVR

Tutorials
=> * AVR-Tutorial
=> * AVR-GCC-Tutorial

von Gast (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
int main()
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.

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.