Forum: Mikrocontroller und Digitale Elektronik ATmega8 Programm nach ATmega48 portieren?!?


von Bastian S. (bastianschmelzer)


Lesenswert?

Hallo zusammen,
  ich verzeifel fast am ATmega48. Ich versuche folgendes Programm für
den ATmega48 anzupassen und trotzdem läuft es bis jetzt nicht.
Ich hab nur die Register des INT0 angepasst. Vielleicht hat jemand
Erfahrung mit dem portieren und kann mir sagen, was noch alles geändert
werden muss... aus den Appnotes von Atmel wird man nicht wirklich
schlau.

Gruß,
  Bastian

von Hannes L. (hannes)


Lesenswert?

Drucke dir die Listen:
- Interrupt-sources und
- Register Summary
aus und nimm dann beim Vergleichen Bleistift und Textmarker.

Ich bin immernoch der Meinung, dass die Entwickler der Megax8-Serie
besoffen waren...

Prost & guten Rutsch...
...

von Benedikt (Gast)


Lesenswert?

>dass die Entwickler der Megax8-Serie besoffen waren...

Das auf jedenfall.
Und derjenige der das Datenblatt geschrieben hat auch: Fast alle
Assembler Beispiele funktionieren nicht, da häufig out durch STS
ersetzt werden muss, aber eben nicht immer.
Ohne das passende Makro ist das per Assembler kaum möglich.
Den mega48 programmiere ich daher nur in C.

Davon abgesehen ist der interne RC Oszillator miserabel.
Während der des mega8 +/-2% hatte, hat der des mega48  +/-10%.

Selbst mit einer Kalibrierung ist nicht sehr viel zu erreichen:
Beim mega8 im Klimaschrank bei konstant 40°C schwankt der Wert auf
einem Frequenzzähler mit 1s Messintervall um etwa +/-60ppm.
Beim mega48 um etwa das 10 fache:  +/-5000ppm !

von Jadeclaw D. (jadeclaw)


Lesenswert?

Was die Sache mit dem Oszillator bei neueren AVRs anbelangt, da hat sich
ElmChan schonmal drüber ausgelassen:
http://elm-chan.org/docs/avr/jitter.html
Man braucht den japanischen Text nicht zu verstehen,
die Bilder rechts sind auch so deutlich genug.
Hmm, Stromsparen auf Kosten der Stabilität?
Da war doch noch was...
Ja, richtig, da hatte jemand Probleme,
einen ATTiny13 seriell an einen anderen Controller anzuhängen.
Nun, wenn der Takt so aussieht, wundert mich nichts mehr.

Gruss
Jadeclaw.

von Benedikt (Gast)


Lesenswert?

Die Seite kenne ich.
Ich hatte eine Schaltung bei der ich einen vollen 8bit Port und den
UART brauchte.
Daher habe ich den Oszillator gestern so genau kalibriert.
Unkalibriert (also mit dem OSCCAL Wert für 3,3V) lief der UART.
Mit exakt 8MHz nicht. Nur wenn der der Oszillator etwa 0,5% schneller
läuft kommen die Daten fehlerfrei an.

von Bastian S. (bastianschmelzer)


Lesenswert?

Danke erstmal für die Antworten. Leider bekomme ich langsam das Gefühl,
daß es nicht wirklich gut war von PIC nach AVR zu wechseln.
Die Dokus des ATmega8 und 48 sind echt der letzte Sch***ß!
Die verstreuen die Informationen über die gesamte Doku,so daß ich
erstmal stundenlang suchen muss,bis ich die finde. Bei Microchip sind
die schön nach Thema geordnet. Ok, nun zu eueren Postings:

@HanneS:
  Das mit dem Ausdrucken ist ne gute Idee,werd ich sofort machen.
Aaaaber, ich war der Meinung, daß ich alle notwendigen Register
geändert hab und auch die neue Lage der Bits beachtet habe. Werd das
aber trotzdem nochmal checken und dann Code posten.

@Benedikt:
 Ich muss doch STS statt OUT nutzen, wenn die Register im extended I/O
liegen,oder?!? Gibt es irgendwo genauere Infos dazu?


Gruß,
  Bastian

von Benedikt (Gast)


Lesenswert?

Wenn die Register im extended Bereich liegen, dann STS, ansonsten OUT
oder STS Register+0x20, wert
Bei Atmel gibt es irgendwo eine AppNote mit passenden Makros die selbst
entscheiden wann welcher Befehl benötigt wird.

von Michael (Gast)


Lesenswert?

Besonders zu beachten ist auch, daß das interne RAM nun ab 0x100
beginnt. Da hatte ich mal Probleme.

von Bastian S. (bastianschmelzer)


Lesenswert?

@Michael:
  Mist, das hatte ich ganz übersehen. Aber nachdem ich versucht habe
das anzupassen, funktioniert das immer noch nicht :(
Wahrscheinlich ist es einfacher den ganzen Scheiß einfach neu zu
schreiben.

MfG,
  Bastian

von Michael (Gast)


Lesenswert?

Wenn's bei mir nicht will, füge ich immer eine Endlosschleife ein, die
nur einen Portpin 'toggled' und suche die Stelle, ab wo das dann
nicht mehr klappt.
Neu zu schreiben, ist zu aufwendig; man muß ganz penibel die Stelle
suchen, wo die Bits in den IO-Registern umgerührt wurden.
Siehe oben: HanneS.
Und plötzlich läuft dann alles, wie gewünscht :-)

von Florian (Gast)


Lesenswert?

Hi, ich möchte demnächst auch mehrere Atmega 88 oder 168 kaufen.

Sind da die gleichen Probleme wie mit dem Atmega 48?

Wenn ja, dann wäre ja eher abzuraten, oder?

Gruß Florian

von Hannes L. (hannes)


Lesenswert?

Satz mit X:                Xundes Neues Jahr...

Ich habe auch einige Mega48 und Mega168 liegen, aber noch nix damit
gemacht.

Blöd ist ja, dass ausgerechnet die Register, die man oft im Interrupt
(wo es auf kurze Routine ankommt) braucht, im Ext.I/O liegen und
dadurch die ISRs unnötig verlangsamen.

Wenn man also die "neuen Features" nicht braucht und das größere
Gehäuse des Mega16 nicht stört, dann kommt man mit Mega8535 und Mega16
besser weg...

Klar, wir werden dieses bescheuerte Chipdesign nicht ändern, aber ATMEL
hat sich mit dieser "Innovation" eigentlich lächerlich gemacht. Schade
eigentlich, denn ansonsten mag ich die AVRs.

...

von Jadeclaw D. (jadeclaw)


Lesenswert?

@Florian: ATMega 88 und 168 sind praktisch gleich mit dem 48er,
haben halt mehr Speicher.
Zwei Dinge, die mir wichtig wären, sind einerseits der drastisch
reduzierte Stromverbrauch, zum anderen der PinChange-Interrupt/Wake-Up
auf jeden Portpin.
Beides fehlt dem ATMega8/16/32.
Aber. das besoffene Design hat einen Grund:
""The ATmega48/88/168 is a
complex microcontroller with more peripheral units than can be
supported within the 64 location reserved in Opcode for the
IN and OUT instructions.""
Richtig, die Portadresse ist Teil des IN/OUT-OpCodes.
Trotzdem, die Peripherie hätte wirklich etwas sinnvoller angeordnet
werden können, z.B. alles, was im ATMega8 schon drin ist, auch hier auf
die gleichen Adressen legen.
Bis auf die Tatsache, das PonyProg mit diesen Teilen nicht umgehen kann
und ich gerade zu faul bin, mir einen anderen Programmieradapter zu
kaufen/bauen, sehe ich eigentlich keinen Grund, diese Teile nicht
einzusetzen.

Gruss
Jadeclaw.

von Hannes L. (hannes)


Lesenswert?

Klar, die MegaX8 brauchen (wie Mega128) mehr als 64 Bytes I/O. Also ist
Extended-I/O schon sinnvoll. Aber warum lässt man im bitweise
ansprechbaren I/O und im normalen I/O soviele Adressen ungenutzt?? Das
meinte ich, als ich die MegaX8er Serie "schlechtredete". Das Teil ist
einfach nur halbherzig entwickelt worden, da hätte man sehr Vieles
besser machen können.

Was mich auch noch etwas am DIL28 stört, ist das Pinout. Wenn man UART
nutzen will, braucht man auch einen Quarz. Nutzt man aber Quarz und
UART, hat man keinen kompletten 8-Bit-Port mehr. Schade eigentlich,
habe ich schon vermisst.

...

von Benedikt (Gast)


Lesenswert?

> Wenn man UART nutzen will, braucht man auch einen Quarz.
>Nutzt man aber Quarz und UART, hat man keinen kompletten 8-Bit-Port
mehr.

Genau, und der einzige kleine uC mit 8bit Port ist der tiny2313. Aber
der hat für vieles zuwenig RAM.
Daher bleibt oft nur der mega8515 übrig.

Wobei man eigentlich beim Betrieb im Innenbereich meistens keine
extremen Temperaturscwankungen hat, und man daher den internen
Oszillator des mega8 nehmen könnte. Was aber beim mega48 nicht geht, da
dessen Oszillator eine Fehlentwicklung ist.

von Florian (Gast)


Lesenswert?

Hm, wenn das Pony Programm den µC nicht kennt, und der
Programmieradapter falsch ist, was könnte man dann noch nehmen? Gibts
da andere Möglichkeiten?

Weiß zufällig jemand, wo man diese Teile in TQFP32 Gehäuse bekommt?

Gruß Florian

von Jadeclaw D. (jadeclaw)


Lesenswert?

Ja.
http://www.der-hammer.info/hvprog/index.htm
Den will ich mir dann doch mal bauen.
Da dieser identisch zum Programmieradapter des STK500 ist,
geht dann auch das Programmieren direkt aus dem AVRStudio heraus.
Und man bekommt auch total zerkonfigurierte Controller wieder in den
Griff (HV-Parallel/Seriell-Mode).

ATMega8 / 88 in TQFP gibt's hier:
http://www.elektro-nix.de/pi1074897291.htm?categoryId=3

@Hannes: T6963-Display und Quarz gleichzeitig ist schon das Problem.
Entweder Qarz weglassen oder die Displayanschlüsse über sämtliche Ports
verteilen, je nachdem, was sonst entbehrlich ist.
Gepaart mit einer mehr oder weniger scheußlichen Bitschubserei.
Ich glaube, ich gönn' mir mal ein paar 8535, für den Programmer
brauch' ich eh einen.

Gruss
Jadeclaw.

von Hannes L. (hannes)


Angehängte Dateien:

Lesenswert?

> @Hannes: T6963-Display und Quarz gleichzeitig ist schon das Problem.

Eben... - Siehe Bild. Ist Mega8 mit T6963C-LCD und angestecktem MAX232,
der mangels Quarz nur als Ladungspumpe für das LCD (-9V) taugt. Die
serielle Verbindung ist mangels Quarz nicht wirklich brauchbar. Die
Quarzpins sind allerdings vom LCD belegt (Data). Nachrüstung des
Quarzes ist also nur schwierig möglich.
Nunja, war eh nur ein Spielprojekt...

...

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.