ATMega 328

Hi,
erstmal einen Gruß in die Runde.
Bin ein Neuling, was µC angeht.

Vorab als Info:
Mit Elektronik kenne ich mich relativ gut aus. Mache viele Reparaturen in der Analogtechnik (speziell Hifi), und habe zum arbeiten 2 Oscar´s, Labornetzgerät, diverse Multimeter, und eine Menge Kleinkram (Halbleiter etc.)
Programmieren kann ich nur html und etwas php. Das wird mir zwar nicht weiterhelfen, aber das eine oder andere Programmieren zu lernen sollte wohl noch funktionieren. Man findet ja auch schon einige Codes im web, die man sich anpassen kann.
Jetzt möchte ich gerne mal etwas mit dem µC basteln.
Habe schon einige Tutos über den Mega8 gelesen, aber ich möchte gerne mit dem ATMega328 einsteigen.
Als Bredboard wollte ich mir den Uno Rev 3 kaufen, da man den ATMega auf dem Board Programmieren, und danach den IC auf einen Sockel auf einer Platine aufstecken kann.
Ich wollte zuerst einmal gerne fragen, ob sowohl der ATMega 328 als auch der ATMega 328P mit dem Uno V3 Programmierbar sind.
Meine zweite frage wäre, ob es möglich ist, den Kompletten Code, der bereits auf einem 328 oder 328P drauf ist, sich herauszukopieren, und auf einen anderen 328 oder 328P zu installieren, bzw. zuprogrammieren (z.B. als Ersatz IC).

Viele Grüße
Ben

Hallo Ben, C programmieren lernt man nich an Beispielen. Aber man kann damit anfangen.

Soweit mir bekannt ist, besteht der Unterschied zwischen Atmega328 und Atmega328P darin, das zweiteres PicoPower nutzen kann (niedirigere Spannungen).

Aulsesen und auf neuem übertragen ist niht das Problem. Jedoch vorab etwas abändern ist so nich t machbar!

Sigmata:
Als Bredboard wollte ich mir den Uno Rev 3 kaufen, da man den ATMega auf dem Board Programmieren, und danach den IC auf einen Sockel auf einer Platine aufstecken kann.
Ich wollte zuerst einmal gerne fragen, ob sowohl der ATMega 328 als auch der ATMega 328P mit dem Uno V3 Programmierbar sind.

Hallo,

zunächst mal Gruß zurück und willkommen im Forum :slight_smile:

Ich glaube bei Dir herrscht noch etwas Begriffs-Verwirrung. Der Arduino ist kein Breadboard und auch kein Programmiergerät.

Ein Breadboard ist ein Board in das man Bauteile einstecken kann und die Anschlüsse ohne zu löten mit Drahtbrücken verbinden kann. Siehe hier: Breadboards

Du könntest also z.B. einen Microcontroller, sagen wir den ATMega328 auf ein Breadboard stöpseln, ein paar Bauteile dazu, und hättest, falls alles richtig aufgebaut ist, ein lauffähiges Microcontroller-System. Z.B. so: Controller auf Breadboard

Um diesen Controller dann zu programmieren, würdest Du ein Programmiergerät brauchen. Z.B. sowas: X-beliebig ausgesuchter ISP-Programmer, es gibt jede Menge mehr

Du kannst aber auch einen Arduino als Programmiergerät benutzen und dann andere Controller damit programmieren. Siehe hier: Arduino als Programmer

Der Arduino ist ein Protoboard, auf dem neben dem Controller bereits die nötigen Bauteile vorhanden sind, damit der Controller laufen kann. Der Controller auf dem Arduino kann ohne Programmiergerät programmiert werden, da er einen Bootloader enthält (ein Programm), dass über die serielle Schnittstelle ein Programm entgegen nimmt, und dieses dann in den Flash-Speicher des Chips auf dem es selbst läuft, schreibt. Der Controller programmiert sich also quasi selbst.

Wie man den Bootloader in einen fabrikneuen Controller bekommt, siehst Du hier: Bootloader

Also nochmal kurz: Der Arduino ist ein Protoboard, auf dem sich ein lauffähiges Microcontroller-System mit Bootloader befindet. Dazu gibt es die passende PC-Software um dieses möglichst einfach programmieren zu können (Arduino-IDE oder auch mittlerweile verschiedene andere).

Sigmata:
Meine zweite frage wäre, ob es möglich ist, den Kompletten Code, der bereits auf einem 328 oder 328P drauf ist, sich herauszukopieren, und auf einen anderen 328 oder 328P zu installieren, bzw. zuprogrammieren (z.B. als Ersatz IC).

Kommt drauf an. Die AVR-Controller verfügen über Lock-Bits, die das verhindern sollen, siehe hier: Fuse- und Lockbits. Falls diese nicht gesetzt sind, kannst Du den Controller mit einem Programmiergerät auslesen und den ausgelesenen Inhalt in einen weiteren Controller flashen.

Gruß,
Ralf

Das Arduino System (Platine und Programmierumgebung) verwendt den C-C++ Complier des Controllerherstellers. Dieser beherscht C und eine großteil der C++ Implementation.
Wenn Du PHP bereits kennst dann wirdt Du dich in C wiederfinden. Die Syntax ist sehr ähnlich. Was vollkommen anders ist sind die Variablen. Es gibt in C keine Strings (nur auf Umwege) und die Variablentyp bzw Typänderungen müssen explizit gmacht werden (PHP macht es automatisch)

Grüße Uwe

Einen guten Morgen zusammen :slight_smile:

Schachmann:
Kommt drauf an. Die AVR-Controller verfügen über Lock-Bits, die das verhindern sollen, siehe hier: Fuse- und Lockbits. Falls diese nicht gesetzt sind, kannst Du den Controller mit einem Programmiergerät auslesen und den ausgelesenen Inhalt in einen weiteren Controller flashen.

Gruß,
Ralf

Hi Ralf
Ja, dass mit dem Bredboard habe ich echt verkehrt verstanden. Ich dachte das hiesse so, weil der ATMega ja auf den Ardunio aufgesteckt ist. Jetzt verstehe ich auch, warum die andere Arduino Uno Version einen aufgelöteten µC hat.
Und ansonsten habe ich bisher auch noch nie mit den Steckboards gearbeitet (obwohl ich die gut finde, war aber bisher einfach nicht nötig). Kleinere Testschaltungen bastle ich mir immer auf Lochplatinen (von früher so gewöhnt.). Aber das wird sich jetzt wohl ändern :slight_smile:
Dank deinen sehr guten Tipps werde ich mir den AVR In-System Programmer MKII kaufen, und werde die Schaltungen auf einem ( jetzt aber korekkt :wink: ) Bredboard machen. Die Sachen die mir dann gefallen, kommen dann auf eine Platine.
Ich habe gestern noch ein Video bei YT gesehen, wo das mit einem ATMega 8 gemacht wurde (finde das Video gerade nicht). Aber so würde ich das dann auch machen. Der User beschreibt, was alles nötig ist, um auf dem Steckbrett den Mega8 zu Programmieren, und auch direkt für Versuchszwecke zu nutzen.
Aber ich habe schon gesehen, dass der Mega 328 eine ganz andere Pinbelegung hat, aber OK, dass kann man ja dann alles nach und nach rausbekommen.

Zu den Fuse-bits:
Können denn die vorher gesetzten Fuse- oder Lockbits nicht wieder rückgängig gemacht, bzw. umprogrammiert werden?
Habe bei Wiki gelesen, dass das Wort Fuse-bits aus dem Wort Fuse für Schmelzsicherungen abgeleitet wird.
Ist denn in den µC´s auch eine echte Schmelzsicherung eingebaut, oder nennt sich das nur so und wird per Code gesteuert?
Ich habe mal was von "Fuse-bits setzen" gelesen. Wenn die per Software gesetzt werden, müssten die doch eigentlich auch wieder geändert werden können? Vorausgesetzt, man weiß wie .... :slight_smile: ..... oder schmilzt da wirklich was durch?

uwefed:
Das Arduino System (Platine und Programmierumgebung) verwendt den C-C++ Complier des Controllerherstellers. Dieser beherscht C und eine großteil der C++ Implementation.
Wenn Du PHP bereits kennst dann wirdt Du dich in C wiederfinden. Die Syntax ist sehr ähnlich. Was vollkommen anders ist sind die Variablen. Es gibt in C keine Strings (nur auf Umwege) und die Variablentyp bzw Typänderungen müssen explizit gmacht werden (PHP macht es automatisch)

Grüße Uwe

Hi Uwe
Das ist doch schon mal was. Ich werde dann mal anfangen, mich in C, bzw C++ Programmierung einzuarbeiten.
Ich habe bisher eine Menge über das Thema µC gelesen, und ich war überrascht wie sehr manche Leute auf Bascom oder Assembler schwören.
Aber was ich so mitbekommen habe, bietet C immer noch die meisten Möglichkeiten um einen ATMega anzusteuern. Ist das korrekt so? ( naja, sonst hättest du das wohl auch nicht vorgeschlagen ...)
Würde für mich eh gut passen, wenn bei C ähnlichkeiten zu php bestehen :slight_smile:

Vielen herzlichen Dank euch allen für eure Antworten. Das hat mich jetzt schon ein ganzes Stück voran gebracht :slight_smile:
Ich wünsche euch ein erholsames Wochenende.

Viele Grüße
Ben

Einen guten Morgen zusammen :slight_smile:

Schachmann:
Kommt drauf an. Die AVR-Controller verfügen über Lock-Bits, die das verhindern sollen, siehe hier: Fuse- und Lockbits. Falls diese nicht gesetzt sind, kannst Du den Controller mit einem Programmiergerät auslesen und den ausgelesenen Inhalt in einen weiteren Controller flashen.

Gruß,
Ralf

Hi Ralf
Ja, dass mit dem Bredboard habe ich echt verkehrt verstanden. Ich dachte das hiesse so, weil der ATMega ja auf den Ardunio aufgesteckt ist. Jetzt verstehe ich auch, warum die andere Arduino Uno Version einen aufgelöteten µC hat.
Und ansonsten habe ich bisher auch noch nie mit den Steckboards gearbeitet (obwohl ich die gut finde, war aber bisher einfach nicht nötig). Kleinere Testschaltungen bastle ich mir immer auf Lochplatinen (von früher so gewöhnt.). Aber das wird sich jetzt wohl ändern :slight_smile:
Dank deinen sehr guten Tipps werde ich mir den AVR In-System Programmer MKII kaufen, und werde die Schaltungen auf einem ( jetzt aber korekkt :wink: ) Bredboard machen. Die Sachen die mir gefallen, kommen dann auf eine Platine.
Ich habe gestern zu noch ein Video bei YT gesehen, was das mit einem ATMega 8 gemacht wurde (finde das Video gerade nicht). Aber so würde ich das dann auch machen. Der User beschreibt, was alles nötig ist, um auf dem Steckbrett den Mega8 zu Programmieren, und auch direkt für Versuchszwecke zu nutzen.
Aber ich habe schon gesehen, dass der Mega 328 eine ganz andere Pinbelegung hat, aber OK, dass kann man ja dann alles nach und nach rausbekommen.

Zu den Fuse-bits:
Können denn die vorher gesetzten Fuse- oder Lockbits nicht wieder rückgängig gemacht, bzw. umprogrammiert werden?
Habe mal gelesen, dass das Wort Fuse-bits aus dem Wort Fuse für Schmelzsicherungen abgeleitet wird.
Ist denn in den µC´s auch eine echte Schmelzsicherung eingebaut, oder nennt sich das nur so und wird per Code gesteuert?
Ich habe mal was von "Fuse-bits setzen" gelesen. Wenn die per Software gesetzt werden, müssten die doch eigentlich auch wieder geändert werden können? ... oder bewirkt der Code, dass eine interne Sicherung durchbrennt, und das wars dann mit dem rauskopieren und/oder umprogrammieren ... ?

uwefed:
Das Arduino System (Platine und Programmierumgebung) verwendt den C-C++ Complier des Controllerherstellers. Dieser beherscht C und eine großteil der C++ Implementation.
Wenn Du PHP bereits kennst dann wirdt Du dich in C wiederfinden. Die Syntax ist sehr ähnlich. Was vollkommen anders ist sind die Variablen. Es gibt in C keine Strings (nur auf Umwege) und die Variablentyp bzw Typänderungen müssen explizit gmacht werden (PHP macht es automatisch)

Grüße Uwe

Hi Uwe
Das ist doch schon mal etwas. Bin gerade einen älteren Plattenspieler am restaurieren, aber wenn der fertig ist, werde ich mich mal in C, bzw C++ Programmierung anfangen einzuarbeiten.
Ich habe bisher eine Menge über das Thema µC gelesen, und ich war überrascht, wie sehr manche Leute auf Bascom oder Assembler schwören.
Aber was ich so mitbekommen habe, bietet C immer noch die meisten Möglichkeiten, um einen ATMega anzusteuern. Ist das korrekt so?
Würde für mich eh gut passen, wenn bei C, ähnlichkeiten zu php bestehen :slight_smile:

Vielen herzlichen Dank für eure Antworten. Das hat mich jetzt schon ein ganzes Stück voran gebracht :slight_smile:

Viele Grüße
Ben

Hallo Ben,

die Fusebits kannst du auch wieder per Programmiergerät löschen - aber nur mitsamt dem Programmcode! Sonst wären sie ja sinnlos :wink:
In der Arduino IDE, der Programmierumgebung für den Arduino hast du darauf aber keinen Zugriff, um Anfänger nicht zu überfordern. Darum kannst du in den allermeisten Fällen über den ISP Header (die 6 Kontaktstifte neben dem Atmel-Chip) den Code auslesen. Allerdings ist diese HEX-Datei nicht bearbeitbar, wie der Quellcode.
Bei den Fusebits gibt es ein paar Stolpersteine. Man kann sich z.B. so aussperren, das man mit Arduino Boardmitteln keinen Zugriff mehr auf den Chip hat. Z.B kann man den Reset-Pin zu einem ganz normalen I/O umfunktionieren. Ohne Reset funktioniert aber das Neuprogrammieren per ISP nicht mehr!
Für sollche Fälle gibt es dann noch die sogenannte HV-Programmierung.

Gruß Gerald

Zu den Fusebits:
http://forum.arduino.cc/index.php?topic=205677.msg1514188#msg1514188

Aber ich habe schon gesehen, dass der Mega 328 eine ganz andere Pinbelegung hat

Nö. Du kannst den Atmega8 auf einem UNO draufstecken und der läuft genauso wie der Atmega328P nur mit weniger Speicher.

Was die Arduino Software betrifft sind aber Atmega328 und 328P nicht ganz kompatibel was ich mal gelesen habe. Haben die nicht unterschiedliche Signaturen?

Ja da gibts komplikationen, aber wer kauft schon freiwillig ein 328 wenns den mit 328P gibt, weit verbreitet.

Serenifly:
Was die Arduino Software betrifft sind aber Atmega328 und 328P nicht ganz kompatibel was ich mal gelesen habe. Haben die nicht unterschiedliche Signaturen?

Ja, haben sie. Eine Möglichkeit ist, die Datei
arduino-1.x.x\hardware\tools\avr\etc\avrdude.conf anzupassen.

Such da mal nach "328", und du wirst sehen, dass da nur der 328p mit

   signature = 0x1e 0x95 0x0F;

vorgesehen ist. Aber die Datei kann man ja vorsichtig :wink: ändern.

1e 95 14 ist, glaube ich, die Signatur eines 328.

Das allereinfachste ist natürlich, nur 328p zu verwenden.
Erstens findet man meistens eh 328p, wenn doch, ist der Preisunterschied so minimal, dass es den extra-Aufwand nicht wert ist. )

Sigmata:
Hi Uwe
Das ist doch schon mal was. Ich werde dann mal anfangen, mich in C, bzw C++ Programmierung einzuarbeiten.
Ich habe bisher eine Menge über das Thema µC gelesen, und ich war überrascht wie sehr manche Leute auf Bascom oder Assembler schwören.
Aber was ich so mitbekommen habe, bietet C immer noch die meisten Möglichkeiten um einen ATMega anzusteuern. Ist das korrekt so? ( naja, sonst hättest du das wohl auch nicht vorgeschlagen ...)
Würde für mich eh gut passen, wenn bei C ähnlichkeiten zu php bestehen :slight_smile:

Mit Assembler kann man auf alle Fälle am meisten machen, weil der Controller direkt programmiert wird. Nachteil ist, daß es kompliziert ist und man ziemlich gut die Interna des Controllers kennen muß. Für manche Sachen ist es aber unumgänglich Assembler zu benutzen (zB für Ansteuerung der WS2812 LED), aber das haben schon andere gemacht und in eine Bibliothek gepackt (in diesem Fall die fastSPI- Bibliothek).

Ich habe das "Vorgeschlagen" weil Arduino das benutztund basta. Für die verwendeten AVR Controller gibt es meines Wissens nur Basic und C /C++ Compielr. Da ist die Wahl nicht sonderlich groß.
C/C++ ist mit JAVA eine der universellsten Programmiersprachen mit denen man fast alles machen kann.

Kauf Dir mal enie Arduino UNO und ein Buch oder such Dir ein Tuteorial im Netz dazu und arbeitet Dich ein.

Grüße Uwe

Der vollständigkeit halber, es gibt auch noch Pascal Compiler.
Sind teilweise sehr gut gemacht, auch mit umfangreichen Bibliotheken

Leider gibt es die nicht umsonst.
C(++) hat sich durchgesetzt, wobei gerade für den Einsteiger Pascal besser geeignet gewesen wäre.

Warum sich dagegen Bascom noch ein wenig etabliert hat verstehe ich nicht.

Was ist Bascom? Eine Veranstaltung? :smiley:

skorpi08:
Was ist Bascom? Eine Veranstaltung? :smiley:

Etwas was man zahlen muß.
Grüße Uwe

Hallo zusammen :slight_smile:

Ich entschuldige mich, dass ich jetzt erst antworte. Ich hatte eine Menge zu tun.
Vielen lieben dank für all eure Antworten. Ihr habt mir wirklich sehr weitergeholfen.
Ich habe mir jetzt doch erstmal den Arduino Rev.3 bestellt, da man den ja auch als Programmer einsetzen kann, wie ich in den link vom Ralf gelesen habe. Der müsste eigentlich für meine Zwecke ausreichen.
Falls sich später rausstellen sollte, das ich damit nicht auskomme, werde ich mir den ATMEL AVR-ISP-MKII dazukaufen. Dann wird sich bestimmt mein Neffe über den Arduino freuen, den er dann von mir bekommt :wink:
Nochmals herzlichen dank für eure hilfe :slight_smile:

Viele Grüße
Ben