Wo den C-Befehlssatz (gcc/WinAVR) für ATMega(8) finden?

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 08 7 2024  22:55:14      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
Wo den C-Befehlssatz (gcc/WinAVR) für ATMega(8) finden?
Suche nach: atmega (404)

    







BID = 520990

BlackLight

Inventar

Beiträge: 5258
 

  


Hallo.

Ich hab mal wieder meinen ATMega8(L) ausgegraben, diesmal zu WinAVR-20080411, AVR-Studio 4(SP2) und PonyProg gegriffen und eine Testplatine und einen LPT-ISP-Programmer gebastelt.

Als ersten Schritt dann von http://www.roboternetz.de oder http://www.mikrocontroller.net ein 'Hello World'-Programm besorgt und erfolgreich getestet. Nachdem das Basteln an fertigen Programmen seinen Reiz verloren hat, stehe ich nun vor dem Problem, dass mir eine Auflistung der wichtigen Befehle für den Mega8 in C (gcc/WinAVR) zur Realisierung meiner Ideen fehlen.

Auf die IOm8.h bin ich schon gestoßen, nur hilft deren Inhalt mir auch nicht weiter.
Um mein aktuelles Problem zu nennen, ich suche den Codeschnipsel für den Unterprogrammaufruf für den Overflow-Interrupt von Timer0.
(Müsste Richtung "ISR(TIMER0_OVF_vect) {}" lauten.)
Momentan stehe ich halt wie ein Ochs vorm Berg und weiss nicht, ob der Fehler an der Initialisierung, falschem Code oder fehlendem Oszi liegt.


Da das nicht mein letztes Problem sein wird, hier meine Frage:
Wo finde ich, bzw. gibt es eine Dokumentation, die den Großteil der Anweisungen erhält, die zu meiner C-Version passen und am liebsten noch zum ATMega8?

Oder gibt es nur die Möglichkeit sich irgendwoher einen unpassenden Codeschnipsel zu besorgen, so lange rumprobieren bis er für seinen Typ und Sprache passt?

BID = 521006

elektroluchs

Gesprächig



Beiträge: 194
Wohnort: Austria

 

  

Mit dem AVR-gcc wird ANSI-C programmiert, die Register für Spezialfunktionen sind im jeweiligen Datenblatt(!) des µC ersichtlich.
--Das Datenblatt des µC ist das wichtigste Dokument beim proggen!!!!!--
Diese Register heißen dann logischerweise auch bei avr-gcc gleich und sind in der ioxx.h definiert. (z.b.: iom8.h)
In der ioxx.h finden sich auch die Namen der Interruptvektoren.

Mich verwundert jetzt, dass du mikrocontroller.net schon erwähnt hast und trotzdem nach einer Doku fragst!?!?
mikrocontroller.net ist DIE Doku wenn es um AVR-Programmierung geht. Auf der Seite findet sich eine Doku sowohl für Assembler, als auch für C, die eigentlich alle Dinge die man für AVR-Programmierung braucht enthält. Auch für dein Problem ist da alles dabei

meg



_________________
So einfach wie möglich, aber nicht einfacher! (Albert Einstein)

BID = 521007

BjörnB

Stammposter

Beiträge: 242
Wohnort: Dortmund

Hallo,

das steht alles im avr-libc Reference Manual, zu finden unter http://www.nongnu.org/avr-libc/ bzw. direkt als http://savannah.nongnu.org/download.....f.bz2

Die gleiche Hilfe als HTML-Version sollte mit der WinAVR-Installation auch schon auf der Platte sein.

Schöne Grüße,
Björn

BID = 521026

BlackLight

Inventar

Beiträge: 5258

@BjörnB, Danke.
War irgendwie klar, dass ich den Wald vor lauter Bäumen nicht gesehen habe, danke für den kleinen RTFM-Rempler.
Die 16-seitige Interrupt-Tabelle(Seite 110ff) mit Namen und Typ - sehr schön. Danke.



Zitat :
elektroluchs hat am 11 Mai 2008 18:31 geschrieben :

--Das Datenblatt des µC ist das wichtigste Dokument beim proggen!!!!!--
Sehe ich anders. Meiner Meinung nach dient es Größtenteils dazu, den µC in Funktion und elektrischen Eigenschaften zu beschreiben. (Hab es gebunden hier liegen, geholfen hat es nicht viel.)

Zu µC.net, zum kurz mal Nachschauen sind die Tutorials bestimmt gut.
Im GCC-Tutorial stehen viele nützliche Tabellen mit Registerbelegungen, aber meiner Meinung nach als Einsteiger zu viele Programmbruchstücke, die ohne Kontext nicht viel bringen.

BID = 521031

ich2000

Gerade angekommen


Beiträge: 7
Wohnort: irgendwo


Zitat :
BlackLight hat am 11 Mai 2008 20:19 geschrieben :



Zitat :
elektroluchs hat am 11 Mai 2008 18:31 geschrieben :

--Das Datenblatt des µC ist das wichtigste Dokument beim proggen!!!!!--
Sehe ich anders. Meiner Meinung nach dient es Größtenteils dazu, den µC in Funktion und elektrischen Eigenschaften zu beschreiben. (Hab es gebunden hier liegen, geholfen hat es nicht viel.)

Dann machst du irgendwas falsch. Ohne das Datenblatt kann man kein µC Programm schreiben (außer in BASCOM vielleicht, aber das ist für mich keine ernstzunehmende Programmiersprache).
Aus dem Datenblatt sind alle Register und Bitnamen ersichtlich, und man erfährt welche Funktionen diese haben.

BID = 521091

elektroluchs

Gesprächig



Beiträge: 194
Wohnort: Austria


Zitat :
Sehe ich anders.


Ok, aber woher weißt du dann wie man richtig 16bit Register ausliest, den Timer richtig konfiguriert oder die serielle Schnittstelle richtig parametriert???? Was ist mit Fusebits setzen????

Bitte erklären! Danke

meg



_________________
So einfach wie möglich, aber nicht einfacher! (Albert Einstein)

BID = 521411

BlackLight

Inventar

Beiträge: 5258


Offtopic :
@ich2000 & elektroluchs, immer langsam mit den jungen Pferden, so weit bin ich lange noch nicht. Und wenn werde ich wohl bei µC.net reinschauen, falls es funktioniert.


[ Diese Nachricht wurde geändert von: BlackLight am 13 Mai 2008 20:15 ]

BID = 521415

bastler16

Schreibmaschine

Beiträge: 2140
Wohnort: Frankreich


Offtopic :

Zitat :

elektroluchs hat am 11 Mai 2008 18:31 geschrieben :

--Das Datenblatt des µC ist das wichtigste Dokument beim proggen!!!!!--
Sehe ich anders. Meiner Meinung nach dient es Größtenteils dazu, den µC in Funktion und elektrischen Eigenschaften zu beschreiben. (Hab es gebunden hier liegen, geholfen hat es nicht viel.)

Eine gebundene Version vom Datenblatt des mega8? Wo hast du das her?

BID = 521418

BjörnB

Stammposter

Beiträge: 242
Wohnort: Dortmund

Ich hatte mir das Datenblatt auch vor einiger Zeit mal ausgedruckt und habe es immer parat liegen, wenn ich programmieren. Für die Konfiguration der Timer, Schnittstellen etc. ist es eigentlich unabdingbar, sofern ich nicht ein vorheriges Programm 1:1 recycle.

Schöne Grüße,
Björn


BID = 521478

BlackLight

Inventar

Beiträge: 5258


Offtopic :

Zitat : bastler16 hat am 13 Mai 2008 20:31 geschrieben :
Eine gebundene Version vom Datenblatt des mega8? Wo hast du das her?
Bei mir fällt unter gebunden, doppelseitig ausdrucken und im örtlichen Copyshop eine Stahl-Klebebindung verpassen lassen.

BID = 521515

bastler16

Schreibmaschine

Beiträge: 2140
Wohnort: Frankreich


Offtopic :


Zitat :
BlackLight hat am 14 Mai 2008 00:20 geschrieben :


Zitat : bastler16 hat am 13 Mai 2008 20:31 geschrieben :
Eine gebundene Version vom Datenblatt des mega8? Wo hast du das her?
Bei mir fällt unter gebunden, doppelseitig ausdrucken und im örtlichen Copyshop eine Stahl-Klebebindung verpassen lassen.

Sowas hab ich mir schon gedacht. Ich brauche öfters das Mega8-Datenblatt und das Instruction Set (zusammen 450 Seiten ), ans Ausdrucken hab ich mich noch nicht gewagt... (Ein Laserdrucker ist wohl empfehlenswert.)


4. Edit, warum kann ich heute nicht richtig schreiben???

[ Diese Nachricht wurde geändert von: bastler16 am 14 Mai 2008 10:46 ]

BID = 522575

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika


Zitat :
stehe ich nun vor dem Problem, dass mir eine Auflistung der wichtigen Befehle für den Mega8 in C

Kannst du denn C?
So wie die Fragestellung formuliert ist, gehe ich davon aus, dass du mal Bascom Basic o.ä. verwendet hast. Es gibt hier eben nicht alles bereits vorgekaut oder gar fertig, sondern der Programmierer muss entweder entsprechend fertige, funktionstüchtige Bibliotheken einbinden oder aber diese, anhand des Datenblatts(!) selbst schreiben.

Da kommt es vor, dass man ein kleines Projekt mit 10 Dateien erstellt, von denen 5 Header- und 5 reine C-Quellkodedateien sind, aber der erzeugte Quellkode nichtmal 100 Byte groß ist - so ist das eben in ordentlichen Sprachen! Alles sauber trennen, denn dann kann man besser portieren oder generischer machen oder in anderen Projekten weiterverwenden.

Ich bin auch mittlerweile dazu übergegangen, alle wichtigen Definitionen im Makefile vorzunehmen.

_________________

BID = 524882

BlackLight

Inventar

Beiträge: 5258


Zitat : DonComi hat am 19 Mai 2008 12:15 geschrieben :

Kannst du denn C?
Nicht wirklich. Nur etwas Basic, V-Basic, Pascal, Delphi, Java, Matlab und Singular und evt. minimal LabView.

Zurück zu meinem Problem, der Timer0 geht nun - war ein ganz blöder Fehler, falls es mal jemand mal gebrauchen kann:
(Hatte den Timer nicht aktiviert. )



Code :

// Timer0-Init

TCCR0 |= (1<<CS00)|(1<<CS02); // Timer0 initialisieren mit Teiler 1024
TIMSK |= (1<<TOIE0) // Timer0 aktivieren

// Interrupt-Routine - Timer0-Überlauf
ISR(TIMER0_OVF_vect)
{
//ISR-Code
}


BID = 524965

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Hallo Schwarzlicht ,

Das sieht doch hervorragend aus!

Vielleicht ein Tipp:

Zitat :
TCCR0 |= (1<<CS00)|(1<<CS02);

Dort wird mit einem bitweisen ODER das Register TCCR0 maskiert.
In diesem Fall wird dieses Register nur von einem Timer benötigt. Mit dieser Operation wird aber nicht garantiert, dass alle anderen Bits auch auf 0 stehen! Sollten also, warum und wie auch immer, vorher im Register bestimmte Bitmuster gestanden haben, werden diese durch die Maske nur dahingehend verändert, dass diese beiden Bits gesetzt werden. Andere Bits werden nicht verändert. So kann man sich potentielle Fehler ins Programm holen, die sogar soweit führen können, dass der Timer nicht das macht, was man ursprünglich wollte.
Besser ist in diesem Fall, den Registerwert absolut festzulegen:
TCCR0 = (1<<CS00)|(1<<CS02);
Da sind dann alle Bits 0, bis auf CS00 und CS02.



Zitat :
TIMSK |= (1<<TOIE0)

Ist in diesem Fall absolut perfekt (bis auf das Fehlende Semikolon ).
TIMSK ist das Register, dass für mehrere Timer zuständig ist, dort sollte man, wie du das richtig gemacht hast, nur Bits verändern, indem man mit dem Komplement verUNDet (Bits löscht) oder mit der Maske verODERt (Bits setzt).


_________________


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 16 Beiträge im Durchschnitt pro Tag       heute wurden bisher 16 Beiträge verfasst
© x sparkkelsputz        Besucher : 181629322   Heute : 4737    Gestern : 5604    Online : 422        8.7.2024    22:55
2 Besucher in den letzten 60 Sekunden        alle 30.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0426709651947