- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 8 von 8

Thema: Kompatibilität von ATmega8 und ATmega168

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.10.2005
    Ort
    Zürich
    Beiträge
    117

    Kompatibilität von ATmega8 und ATmega168

    Anzeige

    Praxistest und DIY Projekte
    Hallo Zusammen

    Ich möchte gerne wissen wie kompatibel der ATmega8 und der neuere ATmega168 ist. Also rein von der Pin-Belegung sind sie ja (bis auf die zusätzlichen Funktionen des ATmega16 kompatibal.
    Ich habe nun das Problem, dass die 8kb Speicher des ATmega8 nicht ausreichen und ich daher etwas mehr benötige.
    Wenn ich jedoch versuche den selben Programmcode (C-Code mit avr-gcc und avr-libc) zu kompilieren kriege ich einige Fehler (Register nicht bekannt, etc.),
    Beim Blick ins Datanblatt stelle ich fest, dass einige Register und auch die Bits in den Registern neue Namen bekommen habe. Sind dies nur neue Namen und funktioniert die Hardware noch gleich, sodass ich den selben Code für das Ansprechen vom EEPROM, SPI, UART, Timer brauchen kann wie beim ATmega8 und nur die Namen (über den Präprozessor) in den Grif kriegen muss?

    Vielen Dank für eure Hilfe.
    cumi

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    10.06.2006
    Ort
    Duisburg-Rheinhausen
    Alter
    78
    Beiträge
    80
    Hallo
    Mein Programm DCF läuft auf dem Atmega168 auch nicht mehr.
    Habe mal im Internet gestoebert,es scheinen einige Register woanders zu liegen.RN-Wissen ist auch was angedeutet.
    Gruß raggy
    Ps.Mit C kenne ich mich nicht aus.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo cumi,

    der Code sollte noch funktionieren, nur die Namen sind anders,
    wenn man einfach nur für den M168er compiliert sollte es eigentlich soweit passen. nach dem anpassen der Registernamen.

    Nur das Hex für einen Mega8 läuft auf einen M168 nicht, da die Register an anderer Stelle sind, und der andere bzw. mehr IRQs hat. Das RAM fängt auch später an als beim M8.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.12.2004
    Ort
    LEV
    Beiträge
    505
    Hallo,
    die Interupt-Sprungtabelle ist anders aufgebaut und die Sprünge sind JMPs anstatt RJMPs.

    Einige IO-Register liegen an anderen Adressen.
    Manche auch an Adressen oberhalb von 1Fh,
    so dass sie mit den "normalen" IO-Befehlen wie IN und OUT usw. nicht erreicht werden können.
    Die muss man dann mit LDS und STS ansprechen.
    Das kostet dann jedesmal einen zusätzlichen Takt.

    Die Registerbezeichnungen haben sich auch geändert, meistens
    sind sie aber nur durch eine Ziffer erweitert worden.
    Z.B: Usart-Data-Register heisst beim Mega-8 UDR und beim Mega-168 UDR0


    Gruß Jan

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.10.2005
    Ort
    Zürich
    Beiträge
    117
    hmm, ok dann hat sich da doch etwas getan. Was ja nicht immer nur schlecht ist. Ich finde es grundsätzlich toll, dass die AVR Familie weiterentwickelt wird. Etwas mühsam ist es jedoch schon

    Aber dann sollen ja eigentilch alle Probleme mit richtigen Haederfiles (io.h) gelöst werden können, denn das wäre mir schon noch wichtig. Ich benutze die Library schon für den ATmega32 und den ATmega8. Dort sind sogar die Name gleich.

    Mal schauen. Ich hoffe ich krieg das hin, denn wenn ich verschiedenen Code habe für die verschiedenen Controller wird das ganze etwas umständlicher.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Du könntest entweder eigene Headerdateien machen, in denen die Namen so angepasst werden, das es bei allen passt.
    Oder den Compiler die Arbeit machen lassen, und Du für jeden AVR den Code angeben:
    Code:
    #if defined (__AVR_ATmega32__)
    	#define irgendwas 1
    #endif
    #if defined (__AVR_ATmega8__)
    	#define irgendwas 2
    #endif
    Oder statt dem define gleich den Code, beim compilieren wird der richtige Code, für den AVR wie im Makefile angegeben, zusammengestellt.

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    57
    Beiträge
    1.195
    Der Migration Guide AVR094 (zu finden auf www.atmel.com) stellt die Unterschiede dar.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.10.2005
    Ort
    Zürich
    Beiträge
    117
    das heisst der ATmega88 und der ATmega168 sind vollständig kompatibel? Denn die Tabelle im AVR094 ist super praktisch...

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress