Forum: Mikrocontroller und Digitale Elektronik ATMega32-16PU für die Arduino IDE vorbereiten und benutzen


von Felix W. (zeor)


Lesenswert?

Hallo alle miteinander,

ich kann mir vorstellen das diese Frage sehr 'Newbie' rüberkommt, aber 
ich finde zu diesem Thema viele Ergebnisse die aber alle das Problem 
(scheinbar) verschieden angehen und ich werde leider nicht schlau 
drauß..

Folgendes habe ich vor : Zur Zeit nutze ich einen Arduino Micro zur 
Steuerung einer Nixie Uhr. Ich würde aber gerne direkt einen 
ATMega-Mikrocontroller im DIP-Gehäuse benutzen (z.B. den hier 
https://www.reichelt.de/Atmel-ATMega-AVRs/ATMEGA-32-16-DIP/3/index.html?ACTION=3&LA=446&ARTICLE=45026&GROUPID=2959&artnr=ATMEGA+32-16+DIP&SEARCH=atmega32), 
da platzsparender, günstiger etc. Mein Programm habe ich zur Zeit in der 
Arduino IDE geschrieben, weswegen ich den Atmega auch gerne darin 
weiterverwenden möchte. Da in den Arduinos hauptsächlich Atmegas benutzt 
werden kann ich mir nicht vorstellen dass das nicht irgendwie gehen 
sollte. Hier sind aber Anleitungen im Internet ein wenig konfus für 
jemanden der neu einsteigt und vorallem kocht jeder sein eigenes 
Süppchen, sodass es schwierig ist einen gemeinsamen Nenner zu finden.

Programmieren würde ich den Mikrocontroller über einen 
USBasp-Programmier für 7€. Wenn aber gesagt wird, kauf dir einen AVR ISP 
mkII, hätte ich auch keine Probleme damit, es soll ja schließlich 
funktionieren. Reicht es aus den Programmierer mit seinen Pins 
(VCC/GND/MISO/MOSI/RST/SCK) an die entsprechenden Pins des Atmegas 
anzuschließen? Wenn nein, was vergesse ich hier? Muss ein bestimmter 
Quarz zum programmieren angeschlossen werden?

Ist die vorherige Frage beantwortet, müsste ich einen Bootloader brennen 
wenn ich das richtig verstanden habe. Als Programm schien mir avrdude 
ganz passabel. Wie brenne ich den Bootloader auf den Mikrocontroller um 
ihn mit der Arduino IDE verwenden zu können? Da gibt es ja zwei 
Text-Dateien, boards.txt und pins.txt. Was muss ich da verändern? Muss 
ich das überhaupt? Außerdem ist mir die Funktion der Fuses nicht zu ganz 
klar.

Wenn der Bootloader drauf ist, sollte der Atmega programmierbar sein wie 
bisher mein Arduino Micro. Die pins.txt hatte ich gerade schon 
angesprochen. Einige Quellen im Internet sagten, dass hier auf nichts 
geachtet werden müsse, einige wiesen darauf hin das diese jetzt ganz 
anders addressiert werden müssten. Was stimmt und wenn letzteres wahr 
ist, kann man das irgendwie korrekt anpassen, damit das mit den 
Bezeichnungen aus dem Datenblatt übereinstimmt?

Sollte der Atmega dann korrekt programmiert sein, brauche ich zum 
betreiben letztendlich nichts anderes als einen 16 MHz-Quarz mit zwei 
parallel geschalteten 22pF-Kondensatoren, eine 5V-Spannungsquelle welche 
mit 100nF parallel entstört wird und dementsprechend die Anschlüsse der 
anzusprechenden Komponenten auf meinem Board, oder?

Ich hoffe dass das alles jetzt nicht zu sehr nachgehakt ist. Mein 
Problem waren die gefundenen Quellen im Internet welche nicht sehr 
hilfreich und vorallem teils widersprüchlich zueinander waren.

Ich freue mich auf eure Antwoten.

Liebe Grüße,
Zeor

von Stefan F. (Gast)


Lesenswert?

> Reicht es aus den Programmierer mit seinen Pins
> (VCC/GND/MISO/MOSI/RST/SCK) an die entsprechenden Pins des Atmegas
> anzuschließen?

Fast richtig, ein 100nF Abblock-Kondensator muss noch dazu (an VCC und 
GND).

> Muss ein bestimmter Quarz zum programmieren angeschlossen werden?

Nur wenn du die Fuses so umstellst, dass der Chip mit einem Quarz 
getaktet wird. Was bei Arduino üblich ist. Im Lieferzustand wird er über 
einen internen 8Mhz R/C Oszillator getaktet, dessen Frequnez durch 8 
geteilt wird. Für serielle UART Kommunikation (also den Arduino 
Bootloader) ist das nur notdürftig geegnet.

Also ja, schließe einen Quarz an. Wie gesagt brauchst du den aber erst, 
nachdem du die Fuses umgestellt hast. Den Bootloader kannst du vorher 
einmalig ohne Quarz hochladen.

> müsste ich einen Bootloader brennen

Musst du nur, wenn du den Chip danach über serielle Schnittstelle 
flashen willst. Du kannst dein Anwednungsprogramm aber auch mit deinem 
ISP Programmieradapter hochladen, dann brauchst du keinen Bootloader.

> einige wiesen darauf hin das diese jetzt ganz
> anders addressiert werden müssten.

Der Bootloader liegt bei AVR Mikrocontrollern am hinteren Ende des Flash 
Speichers. Dein Anwednungsprogramm beginnt am Anfang des Speichers, 
daher musst den Bootloader bei der Programmierung nicht besonders 
berücksichtigen. Du hast wegen des Bootloaders allerdings rund 2kB 
weniger Flash Speicher zur Verfügung.

> Wenn der Bootloader drauf ist, sollte der Atmega programmierbar
> sein wie bisher mein Arduino Micro.

Ja.

> Wie brenne ich den Bootloader auf den Mikrocontroller um
> ihn mit der Arduino IDE verwenden zu können?

Die Arduino GUI hat dafür einen Menüpunkt: Werkzeuge/Bootloader brennen. 
Dabei werden auch die Fuses umgestellt, so dass der Chip danach einen 
Quarz oder Keramikresonator benötigt.

> Da gibt es ja zwei Text-Dateien, boards.txt und pins.txt.

Nichts, solange du dich bei der Pinbelegung an einem Board orientierst, 
dass schon vorhanden ist.

> Sollte der Atmega dann korrekt programmiert sein, brauche ich ... oder?

Ja.

> Mein Problem waren die gefundenen Quellen im Internet welche nicht
> sehr hilfreich und vorallem teils widersprüchlich zueinander waren.

Das könnte am unterschieldichen Erfahrungs-Stand der Autoren loiegen 
aber auch daran, dass die Informationen unterschiedlich alt sind. Mein 
Tipp: Probieren geht über studieren. Die Dinger kosten ja nicht viel.

von Joachim B. (jar)


Lesenswert?

Felix W. schrieb:
> Zur Zeit nutze ich einen Arduino Micro zur
> Steuerung einer Nixie Uhr. Ich würde aber gerne direkt einen
> ATMega-Mikrocontroller im DIP-Gehäuse benutzen (z.B. den hier
> ATMEGA-32-16-DIP

warum diesen?
gleicher Speicher und kleiner wäre ATmega328p und man kann auch gleich 
bei 16MHz den Arduino Bootloader einbringen, dann ginge Update locker 
über die IDE mit FTDI

Wenn du mehr SRAM und Flash benötigst dann lieber ATmega644p, 1284p gibt 
auch Board.txt für die Arduino IDE, dann ginge Update locker über die 
IDE mit FTDI

von Felix W. (zeor)


Lesenswert?

Erst mal vielen Dank an euch beide für die Antworten!

Auf den Atmega32-16-PU bestehe ich nicht, der sah erst mal ganz gut aus 
;). Der Atmega328p klingt ganz gut! Mehr Speicher oder RAM bräuchte ich 
nicht; auf dem Arduino Micro lief es bis jetzt einwandfrei.

Dann müsste es doch ausreichen einen PDIP-28-Sockel und eine 2x3 
Stiftleiste für VCC/SCK/GND/MISO/MOSI/RST für den Atmega328p auf das 
Board anzubringen und den 100nF Abblockkondensator an VCC und GND zu 
verbinden. Wenn ich das richtig verstanden habe kann ich den Quarz dann 
hier weglassen und direkt loslegen, richtig?

von Joachim B. (jar)


Lesenswert?

Felix W. schrieb:
> Erst mal vielen Dank an euch beide für die Antworten!
>
> Auf den Atmega32-16-PU bestehe ich nicht, der sah erst mal ganz gut aus
> ;). Der Atmega328p klingt ganz gut! Mehr Speicher oder RAM bräuchte ich
> nicht; auf dem Arduino Micro lief es bis jetzt einwandfrei.
>
> Dann müsste es doch ausreichen einen PDIP-28-Sockel und eine 2x3
> Stiftleiste für VCC/SCK/GND/MISO/MOSI/RST für den Atmega328p auf das
> Board anzubringen und den 100nF Abblockkondensator an VCC und GND zu
> verbinden. Wenn ich das richtig verstanden habe kann ich den Quarz dann
> hier weglassen und direkt loslegen, richtig?

wenn du den Quarz weglässt hast du die internen 8MHz, da brauchst du für 
die Arduino IDE den passenden 8MHz Bootblock, entweder vom miniPRO mit 
8MHz oder den Optiboot
https://github.com/Optiboot/optiboot/issues/168

von Felix W. (zeor)


Lesenswert?

Achso, da hatte ich einen Satz dann falsch verstanden.

Joachim B. schrieb:
> und man kann auch gleich
> bei 16MHz den Arduino Bootloader einbringen, dann ginge Update locker
> über die IDE mit FTDI

Du meintest dann sicherlich das bei vorhandenem 16 MHz der Programmierer 
verwendet werden kann ohne was mit den Fuses machen zu müssen, richtig? 
Wäre natürlich praktisch hinsichtlich der Motivation den Atmega auf dem 
Board programmieren zu können.

von Manfred (Gast)


Lesenswert?

Joachim B. schrieb:
> wenn du den Quarz weglässt hast du die internen 8MHz, da brauchst du für
> die Arduino IDE den passenden 8MHz Bootblock, entweder vom miniPRO mit
> 8MHz oder den Optiboot

Der ProMini hat einen externen 8MHz drauf!

von Joachim B. (jar)


Lesenswert?

Manfred schrieb:
> Der ProMini hat einen externen 8MHz drauf!

Achtung, es gibt welche mit 8Mhz und 16MHz, deswegen die verschiedenen 
bootloader und natürlich muss die IDE wissen welche F_CPU gilt.

von spess53 (Gast)


Lesenswert?

Hi

Wozu brauchst du eigentlich dieses 'Arduino'-Gedödel?

MfG Spess

von Manfred (Gast)


Lesenswert?

Joachim B. schrieb:
> Manfred schrieb:
>> Der ProMini hat einen externen 8MHz drauf!
>
> Achtung, es gibt welche mit 8Mhz und 16MHz, deswegen die verschiedenen
> bootloader und natürlich muss die IDE wissen welche F_CPU gilt.
Das ist mir bekannt und ich habe beide hier.

Aber, Du sagtest "wenn du den Quarz weglässt hast du die internen 8MHz" 
- ich bezweifele, dass der Bootloader mit internen 8MHz umgehen kann, 
der erwartet halt den externen 8 MHz.

Wo reden wir aneinander vorbei?

---------

spess53 schrieb:
> Wozu brauchst du eigentlich dieses 'Arduino'-Gedödel?
Weil es simpel zu handhaben ist.

Ich weiß nicht, wieviel hunderte Stunden ich früher (beruflich bezahlt) 
mit Assembler zugebracht habe, jedenfalls genug. Meine bisherigen 
Hobbyprojekte hatten keine Probleme, unter Arduino erzeugt zu werden, 
beweisen muß ich mir nichts.

von Joachim B. (jar)


Lesenswert?

Manfred schrieb:
> Joachim B. schrieb:
>> Manfred schrieb:
>>> Der ProMini hat einen externen 8MHz drauf!
>>
>> Achtung, es gibt welche mit 8Mhz und 16MHz, deswegen die verschiedenen
>> bootloader und natürlich muss die IDE wissen welche F_CPU gilt.
> Das ist mir bekannt und ich habe beide hier.

lese deinen Satz nochmal "Der proMINI" den gibt es nicht, es gibt 
verschiedene!


> Aber, Du sagtest "wenn du den Quarz weglässt hast du die internen 8MHz"
> - ich bezweifele, dass der Bootloader mit internen 8MHz umgehen kann,
> der erwartet halt den externen 8 MHz.

du bezweifelst, ich weiss es nicht glaube aber das es geht und u.U. nur 
mit Nachtrimmung des internen Oszillators weil die internen 8MHz nicht 
"quarzgenau" sind, gilt für höhere Baudraten und Timergebrauch.

> Wo reden wir aneinander vorbei?

offensichtlich fast nirgens

> Ich weiß nicht, wieviel hunderte Stunden ich früher (beruflich bezahlt)
> mit Assembler zugebracht habe, jedenfalls genug. Meine bisherigen
> Hobbyprojekte hatten keine Probleme, unter Arduino erzeugt zu werden,
> beweisen muß ich mir nichts.

dito, ein Arduino befreit mich von lästiger Verdrahtung bis der Chip 
läuft, dafür muss ich keine (Restlebens)Zeit mehr vergeuden.

von Felix W. (zeor)


Angehängte Dateien:

Lesenswert?

Ich hab mal einen einfachen, wenn auch nicht ganz hübschen, Schaltplan 
erstellt bei dem ich denke es vernünftig auf meinem Board angeschlossen 
zu haben, wenn ich auf dem Board eine Stiftleiste haben möchte über die 
ich dann den ATmega mit einem USBasp über die Arduino IDE programmieren 
kann.

spess53 schrieb:
> Wozu brauchst du eigentlich dieses 'Arduino'-Gedödel?

Ich habe einen DCF77 und ein RTC-Modul auf dem Board. Die Bibliotheken 
dazu möchte ich zur Zeit noch nicht selber schreiben und ruhe mich erst 
mal auf bereits geschriebenen aus. Will mich Schritt für Schritt dem 
nähern.

von spess53 (Gast)


Lesenswert?

Hi

>Ich hab mal einen einfachen, wenn auch nicht ganz hübschen, Schaltplan
>erstellt bei dem ich denke es vernünftig auf meinem Board angeschlossen
>zu haben, ...

- Welchen Sinn haben R92/R93/C25/C26?

- An AREF kommt nur ein 100nF Kondensator und keine Verbindung zu (A)VCC

- Für AVCC und VCC reichen 100n nach Masse

MfG Spess

von spess53 (Gast)


Lesenswert?

Hi

Nachtrag: Suche mal nach der AppNote

AVR042: AVR Hardware Design Considerations

MfG Spess

von Joachim B. (jar)


Lesenswert?

Felix W. schrieb:
> Ich hab mal einen einfachen, wenn auch nicht ganz hübschen, Schaltplan
> erstellt

halte dich doch an die typische Beschaltung von VCC und AVCC

https://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC
https://www.mikrocontroller.net/articles/Datei:Adc_connection.png

von Felix W. (zeor)


Angehängte Dateien:

Lesenswert?

spess53 schrieb:
> - Welchen Sinn haben R92/R93/C25/C26?

Sollte ein Tiefpassfilter sein. In dem ATmega328p-Datenblatt stand dazu 
folgendes
> [..] If the ADC is used, it should be connected to VCC through
a low-pass filter.

Da hab ich wohl was falsch gelesen, sorry. :o

Joachim B. schrieb:
> halte dich doch an die typische Beschaltung von VCC und AVCC
>
> https://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC
> https://www.mikrocontroller.net/articles/Datei:Adc_connection.png

Ist natürlich peinlich das ich das nicht gefunden habe.. vielen Dank für 
den Hinweis. Ich hab das ganze mal angepasst. Sollte so jetzt stimmen 
oder?

von Felix W. (zeor)


Angehängte Dateien:

Lesenswert?

Ohweia, kleiner Fehler. Hier sollte richtig sein.

von Joachim B. (jar)


Lesenswert?

Felix W. schrieb:
> Ohweia, kleiner Fehler. Hier sollte richtig sein.

kann und will ich nicht überprüfen ohne die alternativen 
Pinbezeichnungen

reset, Rx,  Tx, usw.

ist der Stecker nun für FTDI oder ISP?

von spess53 (Gast)


Lesenswert?

Hi

>Ohweia, kleiner Fehler. Hier sollte richtig sein.

Wozu der Widerstand?

MfG spess

von Felix W. (zeor)


Lesenswert?

Joachim B. schrieb:
> kann und will ich nicht überprüfen ohne die alternativen
> Pinbezeichnungen

Hast schon recht, ist leider doof das bei T3000! für dieses Modell die 
Pinbezeichnungen nicht alternativ mit drin sind. Da es sich um einen 
Atmega328P handelt sollten die Bezeichnungen deckungsgleich mit 
https://www.mikrocontroller.net/articles/Datei:Adc_connection.png sein.

Der Stecker ist für ISP.

spess53 schrieb:
> Wozu der Widerstand?

R92 geht an PC6 (RESET). Soll ein Pull-Up-Widerstand sein, da dass 
Datenblatt
> External Reset. The MCU is reset when a low level is present on the RESET pin
> for longer than the minimum pulse length.

sagt.

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

Felix W. schrieb:
> Der Stecker ist für ISP.

wolltest du nicht die Arduino IDE nutzen und dessen Boosektor?

Dann wäre ein FTDI kompatibles Gegenstück doch sinnvoll?

von Felix W. (zeor)


Lesenswert?

Joachim B. schrieb:
> wolltest du nicht die Arduino IDE nutzen und dessen Boosektor?

Ich wollte das über einen USBasp machen. Wenn ich das richtig verstanden 
habe hat der einen ISP-Anschluss. Des weiteren dachte ich, dass ich den 
Bootsektor brauche um die Arduino IDE nutzen zu können - sprich den 
Programmcode, den ich in der Arduino IDE geschrieben habe, über die 
Arduino IDE in den Atmega328p hochzuladen. Ich kann mich daran erinnern 
das ich den Bootloader für den Arduino Micro einmal über einen ISP 
Anschluß brennen musste, was auch funktioniert hat. Ich liege 
wahrscheinlich weit daneben?

Tut mir leid wenn ich mich etwas doof anstelle, einen µC selber 
programmieren habe ich noch nie gemacht (außer Arduino aber da wird viel 
Arbeit abgenommen durch USB und die IDE) und das ganze kommt mir sehr 
abstrakt vor weil es hier viele Lösungswege gibt. Kann sein das ich hier 
Einzelheiten miteinander verwechsel.

von Zweifler (Gast)


Lesenswert?

Felix W. schrieb:
> Ich wollte das über einen USBasp machen. Wenn ich das richtig verstanden
> habe hat der einen ISP-Anschluss.

Ja.

> Des weiteren dachte ich, dass ich den
> Bootsektor brauche um die Arduino IDE nutzen zu können - sprich den
> Programmcode, den ich in der Arduino IDE geschrieben habe, über die
> Arduino IDE in den Atmega328p hochzuladen. Ich kann mich daran erinnern
> das ich den Bootloader für den Arduino Micro einmal über einen ISP
> Anschluß brennen musste, was auch funktioniert hat. Ich liege
> wahrscheinlich weit daneben?

Der USBASP hat einen ISP, richtig und kann Programme/Sketche aus der 
Arduino-IDE heraus auch ohne bootloader brennen. Funktioniert.

Den Arduinobootloader brauchst Du nur, wenn Du den Arduino auch 
weiterhin über die serielle/USB programmieren willst.

Felix W. schrieb:
> Tut mir leid wenn ich mich etwas doof anstelle,

Alles ok, jeder hat so oder ähnlich angefangen, manche wissen es nur 
nicht mehr. ;-)

von Stefan F. (Gast)


Lesenswert?

> Ich liege wahrscheinlich weit daneben?

Ja.

AVR Mikrocontroller kann man ohne Software über die ISP Schnittstelle 
programmieren. Das geht sowohl mit externer Taktquelle als auch mit dem 
internen R/C Oszillator.

Ein Bootloader ist ein Stück Software, welches es Dir ermöglicht, eine 
andere Schnittstelle zum Programmieren zu verwenden. In deinem Fall die 
UART Schnittstelle, die allerdings eine bessere Taktquelle erfordert, 
als den internen R/C Oszillator. Zumindest wenn es zuverlässig gehen 
soll.

AVR Mikrocontroller werden normalerweise ohne Bootloader verkauft.

Die Arduino IDE unterstützt beide Methoden, UART mit Bootloader und ISP.

von Manfred (Gast)


Lesenswert?

Joachim B. schrieb:
> "Der proMINI" den gibt es nicht,
> es gibt verschiedene!
"Der Pro Mini" ist der, den Arduino offiziell anbietet:
https://www.arduino.cc/en/Main/ArduinoBoardProMini

Von diesem gibt es zwei Varianten mit 8 und 16 MHz, genau diese 
unterstützt die IDE und bringt deren Bootloader mit.

Joachim B. schrieb:
> Wenn ich das richtig verstanden habe kann ich den Quarz dann
>> hier weglassen und direkt loslegen, richtig?
>
> wenn du den Quarz weglässt hast du die internen 8MHz, da brauchst du für
> die Arduino IDE den passenden 8MHz Bootblock, entweder vom miniPRO mit

Die Pro Minis haben einen externen Quarz und es gibt keinen Grund zu der 
Annahme, dass der Arduino-Bootloader eine interne Takterzeugung 
unterstützt!

von Joachim B. (jar)


Lesenswert?

Manfred schrieb:
> Die Pro Minis haben einen externen Quarz

ich weiss das 8MHz oder 16MHz (gibts nicht auch welche mit Resonator?)

Manfred schrieb:
> Der ProMini hat einen externen 8MHz drauf!

und die Aussage mit 8MHz ist für alle miniPRO falsch.
Würdest du deutlicher schreiben dann müsste man nicht korrigieren!

also entweder 8MHz oder 16MHz und nicht extern 8MHz für alle!

Manfred schrieb:
> - ich bezweifele, dass der Bootloader mit internen 8MHz umgehen kann,

weisst du es oder zweifelst du?

Ich wüsste nicht wieso dem Bootloader seine Taktquelle interessieren 
sollte, ist aber leicht festzustellen!

der Atmel kommt mit interne 8MHz und div8 programmiert
Dann kann er per ISP einen 8MHz Bootloader flashen und die div8 aus den
Fuses nehmen

: Bearbeitet durch User
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.