mikrocontroller.net

Forum: Compiler & IDEs ATMega8 auf ATMega168


Autor: Dagmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Kollegen,

seit Tagen suche ich in allen Foren eine Lösung, es will partou nicht 
klappen:
Ich habe ein Prog auf dem ATMega8 geschrieben. Leider ist das Projekt zu 
groß geworden und ich bin auf den ATMega168 umgestiegen. Der ist zwar 
Pinkompatibel, das mit dem Interrupt funzt aber nicht. Der alte Code 
lautete:


ISR(TIMER0_OVF_vect)
{
 hier passiert was, ca. 4x pro sekunde
}


im Hauptprogramm dann:

int main(void)
{
  // interrupt initialisieren
  // Set values for Timer 0: No Prescaler, Timer start, Preload
    TCCR0 |= (5 << CS00);
    //TCNT0 = timerStartValue;
    TIMSK |= (1 << TOIE0);
  sei(); // und start

Der ATMega168 hat aber andere Register. Aber auch mit Datenblatt bekomme 
ich es einfach nicht hin.

Danke schon mal für Eure Hilfe

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bist Du sicher das:
1. Dein Compiler den Mega168 unterstützt ?
2. Du auch als Target den Mega168 ausgewählt und neu compiliert hast ?
3. Keine ASM Teile verwendest ?
Es ist immer hilfreich (um nicht zu sagen notwendig ;) ) alle 
Umgebungsparameter, wie:
- Programmer
- Compiler
- OS wo beides läuft
usw. zu kennen, dann werden können geholfen ;)
Schau erstmal im Makefile nach, ob da noch als Target Mega8 steht ;)
So Du das denn wegen Deines Compilers/Entwicklungsumgebung manuell 
einsehen und ändern kannst !

Autor: Dagmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Markus,

vielen Dank für die Antwort.
Der Compiler (AVR-Studio und Codevision) unterstützen den 168er. Habe 
auch überall den 168er angewählt (Wähle ich den ATMega8 aus, kommt auch 
keine Fehlermeldung.) Als Programmer benutze ich Ponyprog oder den 
Internen von Codevision. Mein OS ist Win2K
Aber was meinst Du mit ASM-Teilen?
Und du meinst also, die Register sind gleich?

Danke
Dagmar
PS: im Makefile ist auch der ATMega168 angegeben.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daß die Register auf anderen Adressen sitzen, darum kümmert sich der 
Compiler.

Leider habe aber auch einige Bits ne andere Bedeutung bzw. sitzen in 
anderen Registern.

Da bleibt also nichts anderes übrig, als jedes verwendete Bit zu 
überprüfen.


Peter

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Codevision passt aber nicht zu "Makefile" und ISR(..._vect) (und auch
nicht zum Thema dieses Forums).

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Dagmar:
Mit Codevision und dem AVR-Studio kenne ich mch nicht aus.
Allerdings solltest Du mal überprüfen, ob Dein Projekt nicht doch 
"versehentlich" irgendwo einen Mega8 spezifischen Teil hat.
Wie Peter schon sagte gibt es da ein paar kleine aber feine 
Unterschiede.
Hol dir beide Datenblätter und schau Dir mal an, ob bei den Dingen die 
Du verwendest in den Datenblättern die gleichen Namen der Register und 
Bits vorhanden sind !
Mit ASM meinte ich ob in Deinem C-Code Assembler inline auftaucht, denn 
damit kommt der Compiler dann meistens nicht klar !

Autor: Dagmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Markus: Eigentlich habe ich wirklich überall den richtigen Controller 
eingestellt. Allerdings habe ich langsam das gefühl, das weder 
Codevision, noch AVR-Studio und erst recht Ponyprog nicht wirklich mit 
dem ATMega168 klarkommen. Ich habe auch ein "Lampe ein-aus-Testprogramm" 
nicht zum laufen bekommen. Auf ATMega8 und ATMega16 bekomme ich keine 
Fehlermeldung.

Lt. Datenbläter sind die von mir verwendeten Register vorhanden. Ich 
bekomme aber Fehlermeldungen, dass es diese Register gar nicht gibt.
Ich habe ein paar Assemblercodes verwendet, das ist aber beim ATMega8 
kein Problem.

Ich werde wohl oder über den Code kleinschrumpfen müssen oder den 
ATMega16 nehmen. Halt blöde weil ich alles umfriemeln muss.

Danke für Eure Hilfe.

PS: @Jörg Wunsch: ...passt nicht ins Thema...?? AVRStudio erzeugt doch 
ein eigenes Makefile. Aber wieso passt Codevision nicht zu 
ISR(..._vect)?
Und welches Forum würdest Du wählen? Avrstudio basiert doch auf GCC. 
Halt nur ohne Kommandozeile.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Lt. Datenbläter sind die von mir verwendeten Register vorhanden. Ich
> bekomme aber Fehlermeldungen, dass es diese Register gar nicht gibt

Welche Register? Wie sehen die Fehlermeldungen aus? Wie sieht der Code 
aus?

> Ich habe ein paar Assemblercodes verwendet, das ist aber beim ATMega8
> kein Problem.

Hast du die denn auch an den Mega168 angepasst?

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ...passt nicht ins Thema...??
Das ist hier ein GCC-Forum. CodeVision ist etwas ganz anderes.

> Aber wieso passt Codevision nicht zu ISR(..._vect)?
Weil CodeVision eine völlig andere Syntax für Interrupt-Handler 
verwendet. ISR(VEKTORNAME_vect) ist WINAVR-Syntax (AVR-libc).

Ich verstehe auch nicht ganz Deine Vorgehensweise: Versuchst Du, den 
CodeVision-Compiler als C-Plugin in AVR-Studio zu verwenden? Das geht 
nicht und wäre wenn es überhaupt ginge ziemlich unsinnig, weil der 
CodeVision-Compiler seine eigene IDE mitbringt. Er benutzt lediglich den 
Simulator von AVRStudio. Der WINAVR-C-Compiler (AVR-GCC) lässt sich 
dagegen problemlos in AVRStudio einbinden...

Autor: Dagmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,
das Rätsel scheint gelöst:
Die Initialisierungssequenz mit den zugehörigen Registern für ATMega8 
(und ATMega16 ?) lauten:

TCCR0 = (1 << CS00);
TIMSK |= (1 << TOIE0);
sei(); // bei Codevison muss hier :#asm("sei"); stehen

für den ATMega168 ist es:
TCCR0A = (1 << CS00);
TIMSK0 |= (1 << TOIE0);
sei(); // bei Codevison muss hier :#asm("sei"); stehen

Dieses Wissen nützt mir jetzt aber gar nix, denn:

1. AVRStudio hat einen Fehler, den man nur durch (inzwischen 5-tägiges) 
Suchen in einschlägigen Foren und Suchmaschienen findet und hiermit 
beheben kann:
Beitrag "pgmspace.h -> Absturz"
Ohne dieses Update (nicht zu verwechseln mit dem Servicepack, das bringt 
den PC zum Absturz) lässt sich der 168er nicht verwenden. Mit Update 
könnte ich auch den 168er nehmen. Leider nur Theoretisch, denn:

2. Ich habe keine Software, die den ATMega168 Proggen kann. Zumindest 
nicht die ausreichend aktuellen Versionen von Codevision oder Ponyprog. 
Mit AVRDude soll es angeblich gehen, hab aber keine Lust mehr auf 
Ausprobieren, weil:

3. Mit dem Update funzt auch die Optimierusgsstufe 3, womit mein Prog 
wieder auf den ATMega8 passt.

Viele Grüße
Dagmar


Wg: ...Das ist hier ein GCC-Forum. CodeVision ist etwas ganz anderes...
´tschuldigung dass ich neben GCC auch einen anderen (bösen?) Compiler 
benutze ;-)

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Öh, das war nur ein Hinweis, warum Jörg meinte, dass das "nicht zum 
Thema dieses Forums passt". Hat nix damit zu tun, dass CodeVision "böse" 
ist. Ich habe ihn auch lange Zeit verwendet und für den Preis, den die 
Vollversion kostet, ist er sicher eine feine Sache, auch im Vergleich 
mit anderen kommerziellen Compilern...

Nur gehen die Leute, die das hier ab und zu lesen, davon aus, dass die 
Postings hier sich auf GCC beziehen, und es deshalb bei nicht 
eindeutigen Hinweisen des öfteren zu Missverständnissen kommt...

Autor: Ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... und proggen des 168 mit PonyProg2000 geht auch. Muss man halt einen 
anderen Mega mit 16k auswählen und darf dann nur den Flash 
programmieren. Fuses erst auslesen und separat brennen. Kommt man zwar 
nicht an alle 168er Fuses ran aber für die gängigen (Oszillator, etc.) 
geht's

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.