Kommunikation zwischen ATmega128 und ATmega88

Hero_123

Mitglied
17. Sep. 2010
183
3
18
Sprachen
  1. ANSI C
Hallo

Ich habe einen Roboter (NIBO2), der einen atmega128 als Master und einen atmega88 als Slave hat; zum Programmieren benütze ich das AVR studio 4, Version 4.18 und WINAVR_20100110 und einen Programmieradapter UCOM-IR2.
Ich habe ein paar Fragen:
wenn ich ein Programm mit dem AVR studio erstelle, wähle ich im AVR Studio "AVR Simulator" und "ATmega128" -> damit wird mein Programm für den atmega128 erstellt und dann auch auf diesen geflasht - was ist zu tun, wenn ich ein Programm NUR für den atmega88 erstellen will (auf diesem laufen die Regleralgorythmen für die 2 Motoren des NIBO2)?
Muss ich dann im AVR Studio den "ATmega88" auswählen? Wird dann das Programm auf den ATmega88 geflasht? Für das flashen habe ich einen Programmieradapter UCOM-IR2 (stellt eine 6-Pin Atmel Schnittstelle zur Verfügung).
Wie funktioniert die Kommunikation ATmega128 <-> ATmega88?

Für die Beantwortung bin ich sehr dankbar, wie aus den Fragen ersichtlich bin ich bezgl ATmegas und deren Kommunikation ein kompletter Newbie...

mfg

Hero_123
 
Hi,

mit demAVR-Studio und anderen InSystemProgrammern kann man nur den Chip
programmieren an dem der ISP-Anschluß direkt dran hängt.

Wenn du also den ATmega88 über einen ATmega128 hinweg programmieren
willst ...

(Quelle)Progger/Herst.Programm----->Mega128----->Mega88(Ziel)

Dann geht das mit Sicherheit nur mit den Programmen die der Hersteller der
Schaltung dazu gelegt hat. Dafür wird man aber im Mega128 ein spezielles
Programm benötigen das die vom Herstellerprogramm ferngesteuerte
Programmierung des Mega88 übernimmt. Sonst wird das nichts.

Also entweder nen ISP für den Mega128 UND den Mega88 (in Summe also 2)
oder vom Hersteller extra erstellte Programme und nen Programm im Mega128
was die Programmierung des Mega88 übernimmt.

Gruß
Dino
 
Hallo,

ich kenne nun deinen Roboter nicht, aber ich gehe mal davon aus, dass auch beim ATmega88 die Programmierschnittstelle (ISP) zur Verfügung steht, das heisst, die entsprechenden Pins sind an einem Stecker herausgeführt. Wie Dino bereits geschrieben hat, ist es möglich den ATmega88 "über" den ATmega128 zu programmieren, es wird hier aber Software auf dem ATmega128 und Software auf dem PC dafür benötigt, das finde ich ziemlich aufwendig, wird hier auch nicht so gelöst sein.

Wenn du Software für den ATmega88 schreibst, musst du natürlich ein neues Projekt für den ATmega88 erstellen, damit der Compiler/Assembler Registeradressen, Speicherbereiche usw. des ATmega88 kennt.

Es wäre aber auch denkbar, dass der Hersteller die nachträgliche Programmierung des ATmega88 nicht vorvorsieht, so dass du den nicht mehr programmieren kannst, sondern als "festen" integrierten Schaltkreis betrachten musst. Aber wie gesagt, kann ich nicht genau sagen, da müsste ich mich erst mal näher mit dem Roboter beschäftigen.

Grüße,
Dirk
 
Hallo,

Es wäre aber auch denkbar, dass der Hersteller die nachträgliche Programmierung des ATmega88 nicht vorvorsieht, so dass du den nicht mehr programmieren kannst, sondern als "festen" integrierten Schaltkreis betrachten musst. Aber wie gesagt, kann ich nicht genau sagen, da müsste ich mich erst mal näher mit dem Roboter beschäftigen.
also ich tippe mal auf genau das. Ich hab mir den Schaltplan mal angesehen.
Nibo2_m88.png
Da sind zwar Widerstände beim MISO/MOSI/SCK aber kein Stecker. Also tippe
ich mal darauf das die Widerstände dafür da sind, den Mega88 über Kontaktierung
mit Nadeln oder Debug-Werkzeugen zu programmieren und das wars dann.
Theoretisch könnte man direkt an die Pins jetzt Drähte anlöten. Aber wenn man
noch nie SMD-TQFP-Gehäuse in den kleinen Abmessungen gelötet hat dann
sollte man da besser die Finger von lassen.

Also theoretisch würde es mit einer Modifikation gehen aber praktisch wird
der Mega88 als normales IC für die Motorsteuerung angesehen und fertig.

Gruß
Dino
 
Atmega 128

Hallo
habe auch einen Nibo 2. Essind nur die ISP Kontakte vom 128 rausgeführt. Entweder der 88 wird mit Nadeln so wie beschrieben programmiert oder es gibt ein spezielles Prg. vom Hersteller dazu. Man kann aber die Fraghe erweitern. Es gibt noch einen zusätrzlichen Bauteil. Denn NDS 3 Abstandssensor. Dieser ist auch mit einem zusätzlichen ISP Anschluss ausgestattet. Wie kann ich diesen programmieren? auch über den 128. Zum betreiben muss ich den Stecker zum Grundplatte 128 bringen um die Betriebspannung zu bekommen. Und wie weiter? Kann ich mit dem AVR Studio auch die Daten runterladen? Es sind auch mehrere Ausgänge/Eingänge vorhanden. Diese haben die pins 13,12,11,10, 2 und 5. Wie erfolgt eine Umschaltun e oder A. IC ist ein Attiny44-20PU
Achim
 
Hi,

Es gibt noch einen zusätrzlichen Bauteil. Denn NDS 3 Abstandssensor. Dieser ist auch mit einem zusätzlichen ISP Anschluss ausgestattet. Wie kann ich diesen programmieren? auch über den 128. Zum betreiben muss ich den Stecker zum Grundplatte 128 bringen um die Betriebspannung zu bekommen. Und wie weiter?
ääähhhh ...Tja Leute ... ich hab keinen nibo2 oder irgendeinen anderen Robbi :D
Das war lediglich ne Analyse des Schaltplans. Da muß dann wohl jemand anderes
weiterhelfen :rolleyes:

Gruß
Dino
 
Hallo
die Frage war eigentlich auch nur zum Schaltplan gestellt. Da ja auf der Zusatzplatine ein ISP drauf ist, kann man es darüber programmieren. Kann also den Stecker von ISP drauf und IC auswählen oder ? bleibt nur die Frage nach der Art der Programmierung. Und das zweite nach euer Erfahrung. Wie kann ich eine Spannung messen über den 128. Habe mir das Datenblatt vom 128 angesehen und bin so schlau wie vorher. Es gehen doch nicht alle Ports für die Messung. Wie oder was kann ich dazu nehmen?
Achim
 
Wie kann ich eine Spannung messen über den 128. Habe mir das Datenblatt vom 128 angesehen und bin so schlau wie vorher. Es gehen doch nicht alle Ports für die Messung. Wie oder was kann ich dazu nehmen?

Hallo,

naja um eine Spannung zu messen, nutzt man den ADC (Analog Digital Converter). Der ADC des ATmega128 hat 8 Kanäle, diese sind am PortF verfügbar. Die Kanäle 4 bis 7 sind nur dann verfügbar, wenn JTAG deaktiviert wurde (Fusebit JTAGEN=1).
Schau dir am besten mal im Datenblatt das Kapitel "Analog to Digital Converter" an. Beispiele wie man den ADC initialisiert gibts auf der Atmel Webseite im Bereich AVR/ApplicationNotes. Falls der ADC mal nicht verfügbar ist, wenn zum Beispiel die Pins belegt sind oder wenn er in einem kleineren Mikrocontroller gar nicht vorhanden ist, gibt es noch die Möglichkeit eine analoge Spannung über die Kondensator-Auflade-Entlade-Methode zu messen, hierfür kann man den internen AnalogComparator nutzen, aber das nur mal vollständigkeitshalber.

Dirk
 
Hi Achim,

die Frage war eigentlich auch nur zum Schaltplan gestellt. Da ja auf der Zusatzplatine ein ISP drauf ist, kann man es darüber programmieren. Kann also den Stecker von ISP drauf und IC auswählen oder ? bleibt nur die Frage nach der Art der Programmierung.
Also mal kurz was zum ISP für den Fall das es noch Verständnisprobleme gibt ...

1. Der ISP muß direkt an dem Atmel sitzen den man programmieren will. Das heißt
also ... 2 Atmels = 2 ISP-Anschlüsse, 3 Atmels = 3 ISP-Anschlüsse.

2. Das Auswählen des ICs beim Progger oder beim AVR-Studio bezieht sich NUR
darauf, das das Programm weiß was es da für einen Baustein vor der Nase hat
für den Fall das es das nicht selber erkennen kann. Also nix mit ...
nen Mega128, nen Mega88 und nen Tiny44 an einem Bus und den kann man
über den Chiptyp dann auswählen. DAS GEHT NICHT ! (Siehe Punkt 1)

3. Wenn man einen Atmel auf nem fertigen Robbi umprogrammieren will, dann
sollte man sich VORHER vergewissern das man auch den originalen Code wo
liegen hat, runterziehen kann (nur wenn Leseschutz nicht gesetzt ist) oder
aus irgendeinem Quellcode erzeugen kann. Wenn nicht, dann hat man später
eventuelle eine HALB funktionsfähige Kiste rumfliegen (zB nen Robbi ohne
Motoransteuerung oder ohne Sensoranbindung).

Man muß nicht alles ändern was man irgendwie (auch über Klimmzüge)
ändern kann. Also erst nachdenken damit man nachher nicht rumjammern
muß.

Gruß
Dino
 
Hallo dino
die Sache mit den ISP ist mir absolut klar. Bleibt bloss noch zu klären, wie ich mit AVR Studio das Programm runterziehen kann. Diese Sache habe ich bisher noch nicht gemacht. Es gibt ein Code vom Hersteller der wird in den 128 geschrieben und arbeitet und/oder leitet weiter (keine Angabe vorhanden) und ist in HEX geschrieben. Kann also diese Sache nicht nachvollziehen. Bleibt also nur als Alternative mit ISP vom Zusatzbord und direkt vom Attiny44 runterziehen. Noch eins, der Attiny ist gesockelt. Er kann also auf etwas anderem beschrieben worden sein.
Achim
 
Hi Achim,

die Sache mit den ISP ist mir absolut klar.
war mir nicht so ganz klar. Und über die Ferne ist das immer etwas schlecht
abzuschätzen.

Bleibt bloss noch zu klären, wie ich mit AVR Studio das Programm runterziehen kann. Diese Sache habe ich bisher noch nicht gemacht.
Auf den kleinen Button mit dem "AVR"-IC gehen (ca in der Mitte)
Dann auf "Program" --> "Flash" [Read]
Du mußt vorher nur eintragen wie die Zieldatei heißen soll.
Am besten irgendwas mit "Mega128-Backup.hex" oder so ...

Schau dir nach dem Lesen die Datei mit nem TEXTEDITOR an (ja das geht!)
Dann kann man schonmal sehen ob das wirklich halbwegs sauber gelesen
wurde. Mit Auslesesicherung kommt man glaube ich nur an die ersten paar
Bytes ran.

Es gibt ein Code vom Hersteller der wird in den 128 geschrieben und arbeitet und/oder leitet weiter (keine Angabe vorhanden) und ist in HEX geschrieben. Kann also diese Sache nicht nachvollziehen.
Dateien mit .hex sind die ausführbaren Programme für den Atmel im
Intel-Hex-Format. Die Dateien lassen sich direkt brennen.

Bleibt also nur als Alternative mit ISP vom Zusatzbord und direkt vom Attiny44 runterziehen. Noch eins, der Attiny ist gesockelt. Er kann also auf etwas anderem beschrieben worden sein.
Evtl auf nem Programmiergerät für Kleinserien programmiert und dann nur noch
bestückt.

Gruß
Dino
 
Hallo
Danke für deine Antwort. Wenn der Attiny44 bereits programmiert ist, dann kann ich ja ausversehen auch überschreiben. Oder hat das Teil ein Bereich drin der fest ist? Über den 128 kann ich die Daten über den i²C Bus holen und weiterverarbeiten. Dabei kann ich auch die Richtung an geben. Zusätzlich hat der Attiny aber noch Ausgänge auf den pins 10 bis 13 und 2 und 5. Wie erreiche ich diese denn? Auch über den Bus?
Achim
 
Hallo dino03, hallo Dirk

ich komme leider erst jetzt dazu, mich bei Euch zu bedanken - hatte sehr viel zu tun...jedenfalls vielen Dank für Eure Mühen (das Checken des Schaltplanes und die Erklärungen bezgl Programmieren des ATmega88 - super Forum!!); somit müßte ich den Herstellerdes Nibo2 kontaktieren, wenn ich über den ATmega128 den ATmega88 mit einem geänderten Programm bespielen möchte, denn an die ISP-Schnittstelle des ATmega88 komme ich ohne Modifikation (von der besser die Finger zu lassen sind!!) nicht ran... ich werde versuchen, vom Nibo2-Hersteller Info/Sourcecode/etc zu bekommen, denke aber, daß ich da 2ter Sieger bleiben werde...Du hast natürlich recht, dino03 - man sollte sich VOR dem Kauf Gedanken machen - aber hinterher ist man immer schlauer oder "Erfahrung ist, was man hat, nachdem man es gebraucht hätte"

mfg

Hero_123
 
Hi,

Du hast natürlich recht, dino03 - man sollte sich VOR dem Kauf Gedanken machen - aber hinterher ist man immer schlauer oder "Erfahrung ist, was man hat, nachdem man es gebraucht hätte"
OK ... vor dem Kauf sollte man sich schon Gedanken machen.

Aber ich meinte eher ... Man soll sich vor dem Dranrumbasteln Gedanken machen
ob man "für den Fall der Fälle" den Programmcode rumfliegen hat um es wieder
in die Ausgangslage zurückzuversetzen.

Wenn man es nämlich verdaddelt und den Original-Code nicht hat um es wieder
in einen funktionsfähigen Zustand zu bekommen dann hat man Edelschrott
fabriziert ;)

Gruß
Dino
 
Hi Achim,

Wenn der Attiny44 bereits programmiert ist, dann kann ich ja ausversehen auch überschreiben. Oder hat das Teil ein Bereich drin der fest ist?
:confused: Was willst du damit sagen ?
Der ist zwar programmiert (Programm im Flash) aber wenn du ihn überschreibst
(neues Programm im Flash) dann ist vom alten Programmcode NIX MEHR ÜBRIG!
Also mit "aus versehen" wär ich da sehr vorsichtig. Kein Original-Programmcode
zum proggen vorhanden und das eigene funtkioniert nicht => Edelschrott !!
Grundsätzlich kann man alles im Atmel überschreiben.

Über den 128 kann ich die Daten über den i²C Bus holen und weiterverarbeiten. Dabei kann ich auch die Richtung an geben. Zusätzlich hat der Attiny aber noch Ausgänge auf den pins 10 bis 13 und 2 und 5. Wie erreiche ich diese denn? Auch über den Bus?
Wenn im 128er ein Programm drin steck das dir die Daten über den I2C-Bus
liefert wenn du den Mega128 per I2C ansprichst, dann ja. Sonst ist wohl
Handarbeit gefragt (selber den Mega128 programmieren) :D Oder wo willst du
jetzt Daten herholen ? vom 128er oder von nem anderen ?

Grundsätzlich gilt ... Der I2C liefert dir nur Daten wenn ...

1. Du den Baustein über den Bus ansprechen kannst (und der auch reagiert)
wo die Dinge die du abfragen wilst dranhängen, und

2. der Baustein entweder in Hardware gegossen ist oder ein Programm drin hat
was die Eingangsleitungen abfragt, die Adressierung vom I2C übernimmt und
die eingelesenen Daten auf dem I2C weiterreicht.

sonst passiert auf dem Bus garnix.

Bei Mikrocontrollern gibt es KEIN Plug and Play. Was du nicht selber programmierst
das kann der Chip auch nicht.

Gruß
Dino
 
Hallo dino03

Du hast natürlich recht - VOR dem Rumbasteln sollte man sich schon versichern, daß man
- den Original Source Code hat oder
- nen Abzug vom hex-Code hat

Hoffe doch, daß sich jeder Bastler des Risikos bewußt ist - ich denke aber nicht, daß jemand OHNE Sourcecode in einem hex-code rumeditiert - so ein hex-code ist doch etwas interpretationsfähig, oder?

mfg

Hero_123
 
Hi,

so ein hex-code ist doch etwas interpretationsfähig, oder?
man könnte mit nem Disassembler aus dem Hex-Code auch wieder ein
Assembler-Listing machen. Aber es gibt wunderbare Tricks, sowas zu
unterbinden ;)

1. Du packst deine Datentabellen mitten in den Bereich des ausführbaren Codes.
2. Die Daten werden schön verteilt in den Code eingelagert.
3. Du bringst "Dummy-Code" im Programm unter der im normalen Ablauf nie benutzt
wird aber den Disassembler durcheindander bringt.
4. ... es gibt bestimmt noch weitere Tricks.

Außerdem hast du nnach der Disassemblierung keinen kommentierten Code.
Also muß man selber interpretieren was sich der Programmierer dabei gedacht
hat. Viel Spaß ! :D

Gruß
Dino
 
Hallo
erst einmal vielen Dank für deine Umfassende Erklärung. Fasse noch mal zusammen was ich verstanden habe. Auf dem Attiny44 muss was drauf sein sonst gibt es keinen Bus. Bei Abfrage vom 128 über den Bus kommenm dann die entsprechenden Daten zurück. Vom Attiny lasse ich lieber die Finger sonst besteht die möglichkeit von Edelschrott. So bisher verstanden. Danke
Achim
 
Hi Achim,

Auf dem Attiny44 muss was drauf sein sonst gibt es keinen Bus. Bei Abfrage vom 128 über den Bus kommenm dann die entsprechenden Daten zurück. Vom Attiny lasse ich lieber die Finger sonst besteht die möglichkeit von Edelschrott.
genau.

Beim I2C-Bus gibt es fertige Bausteine wie zB AT24C512 (EEPROM), PCF8574 (8Bit-IO),
PCF8583 (RealTimeClock), PCF8591 (8Bit-AD/DA-Wandler), ... usw.
die stellt man über Config-Register ein und fertig. An denen kann man nix
kaputt-konfigurieren (wird jedenfalls schwierig). Und dann gibt es Mikrocontroller
die auch einen I2C-Bus haben. Ohne Programm sind die doof und wissen nicht
was sie damit anfangen sollen. Mit Programm können sie entweder als Master
andere Bausteine am I2C ansprechen, abfragen, Daten hinschieben oder auch
selber als Slave dienen (wie bei dir der ATtiny44) und dann zB Daten von
Sensoren, usw über den I2C bereitstellen oder Sachen steuern wenn die
Befehle dazu kommen (zB als PWM-Controller).

Gruß
Dino
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)