mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C Programm, kleine Frage


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

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

volatile unsigned short counter0 = 0;

ISR(TIMER2_COMPA_vect) {
  if ( counter0 ) { // counter0 != 0
    counter0--;
  }
}

void  main( void ) {
  
  unsigned char state = 0;
  
  /**
   * INIT
   */
  
  /*
   * Port B
   */
  
  //PORTB = 0x00;
  DDRB = 0x3F;  // Set BIT0:5 B as Output
  
  /*
   * Port C
   */
  
  // PORTC = 0x00;
  DDRC = 0x3F;  // Set BIT0:5 C as Output
  
  
  /*
   * Port D
   */

  //PORTD = 0x00;
  DDRD = 0xFF;  // Set BIT0:4 D as Output

  /*
   * Timer2
   */

  /* Set Timer to CTC MODE (WGM22:0 to 2); Stop Timer (CS22:0 to 0) */
  //TCCR2B = 0x00;
  TCCR2A = 0x02;

  //TCNT2 = 0x00;  // Set Timer counter to 0
  OCR2A = 0xFA;  // Set Compare Register A to 250
  //OCR2B = 0x00;  // Set Compare Register B to 0

  TIMSK2 = 0x02;  // Interupts: Disable TIMER2_COMPB; Enable TIMER2_COMPA; Disable TIMER2_OVF

  TCCR2B = 0x04;  // Set Prescaler to 64 and start Timer (CS22:0 to 4)
  
  sei();      // Enable interrupts

  /**
   * Main Loop
   */
  
  while ( 1 ) {
    switch ( state ) {
    case 0:
      if ( !counter0 ) {
      PORTB = 0x00;
      PORTC = 0x00;
      PORTD = 0x00;
      state = 1;
      counter0 = 1000;
      }
    break;
    case 1:
      if ( !counter0 ) {
      PORTB = 0x3F;
      PORTC = 0x3F;
      PORTD = 0xFF;
      state = 0;
      counter0 = 1000;
      }
    break;
    } // switsch
  } // while
  //return;
} // 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 ?

Autor: Frank Lorenzen (florenzen)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jean Player (fubu1000)
Datum:

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

Gruß.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Steffen A. (stigmer)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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. ;-)

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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
#include <stdio.h>

int main()
{
  printf( "Hallo world\n" );
}

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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.