Forum: Mikrocontroller und Digitale Elektronik Einen ATmega 16 zum Arduino Standalone benutzen


von Finn S. (scooter757)


Angehängte Dateien:

Lesenswert?

Hello liebes Forum.
So, Ich habe mir bei Reichelt einen Atmega 16-16PU bestellt. Von diesem 
aus möchte ich Später ein paar Taster und nen Display anschließen, und 
dies über die Arduino IDE programmieren.
Einen Arduino Duemilanove habe ich auch hier, da ich, wie auf mehreren 
Seiten (hier im Forum, http://www.arduino.cc/en/Main/Standalone und 
weitere) beschrieben, den ATmega 16 flashen will. Es gibt da nur ein 
Problem: In WinAVR und in der Arduino IDE ist immer nur die Rede von dem 
ATmega 168. Ich habe das ArduinoISP-Programm auf den Duemilanvove 
Gespielt, dann avrdude zum flashen gestartet. Die Commandoargumente habe 
ich von dieser Website: http://tbspace.de/?id=12 . Ich habe alles so 
gemacht, wie bei dem dazugehörigen Youtubevideo: 
http://www.youtube.com/watch?v=IRjEqaDbwXs .
Bei dem FuseBits setzen, bekomme ich eine Fehlermeldung, dass der eFuse 
0 war und jetzt 1 ist. wenn ich dann y zum bestätigen des ändern des 
Fusebits drücke, hängt sich das Programm auf.. Naja, dann habe ich den 
2. Befehl des flashens erfolgreich abgeschlossen, das USB-Kabel in den 
Standalone-Arduino gesteckt und wollte das Programm "Blink" aufspielen, 
dabei gab es dann wieder eine Fehlermeldung: avrdude: stk500_getsync(): 
not in sync: resp=0x00.
Im Internet wird der ganze Vorgang immer nur mit dem Atmega 168 oder 328 
beschrieben, nicht mit dem 16. Gibt es eine Möglichkeit dies auch mit 
dem 16 zu machen, habe ich irgendetwas übersehen, oder muss ich mir doch 
noch den 168 anschaffen? (Ich habe mich für dem 16 entschieden, da 
dieser mehr IO-Ports hat, der 168 hätte zu wenig..)

Ich bin grad ratlos, was ich nun tun soll. Im Anhang habe ist noch ein 
Bild von meinem Aufbau, daran sollte aber eigentlich nix sein.

LG scooter757

von Hubert G. (hubertg)


Lesenswert?

ICh habe es zwar noch nicht probiert, aber wenn man den diversen Threads 
glauben darf, dann funktioniert das Programmieren über den Arduino nur 
mit den angegebenen Kontrollern.
Du kannst den Mega16 mit dem Arduino Bootloader versehen und dann dein 
Programm mit der Arduino IDE draufspielen.
Du brauchst allerdings einen ISP-Programmer dazu.

von Jojo (Gast)


Lesenswert?

@Hubert G.

Bist du sicher das der Arduino Bootloader auf einem Mega16 läuft?
Ich bin mir da nicht so sicher.

von Hubert G. (hubertg)


Lesenswert?

Jojo schrieb:
> Bist du sicher das der Arduino Bootloader auf einem Mega16 läuft?

Da war ich wohl zu optimistisch, geht mit großer Wahrscheinlichkeit nur 
auf den Kontoller die in einem Arduino-Board verbaut sind.

von Finn S. (scooter757)


Lesenswert?

Hmm.. ok, werde mir wohl dann noch entweder einen ATmega 168 oder 8 
kaufen müssen... Die haben aber zuwenig IO-Pins.. brauche 7 für ein 
Display und 6 oder 8 Eingänge für Schalter und RXD/TXD zur Kommunikation 
mit deinem PC.. Hat irgendjemand ein Vorschlag, wie ich das am besten 
machen könnte? (Vielleicht die schalter über analog..?)

Danke, scooter757

von Phil (Gast)


Lesenswert?

Wie wäre es den atmega direkt in C zu programmieren?

Nur ein Display und ein paar Schalter, dafür braucht man doch keine 
riesen Library.


PHil

von Hubert G. (hubertg)


Lesenswert?

Beitrag "Tastenmatrix auslesen über nur 2 Leitungen"
Hier gibt es einige Ansätze zum IO sparen.

von Cyblord -. (cyblord)


Lesenswert?

Phil schrieb:
> Wie wäre es den atmega direkt in C zu programmieren?
>
> Nur ein Display und ein paar Schalter, dafür braucht man doch keine
> riesen Library.
>
>
> PHil

Wenn er das könnte wäre er kein Arduino Nutzer. Wenn ich schon lese:

> Arduino Duemilanove

Begriffe von Deppen für Deppen.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Finn Stutzenstein schrieb:
> Hmm.. ok, werde mir wohl dann noch entweder einen ATmega 168 oder 8
> kaufen müssen... Die haben aber zuwenig IO-Pins.. brauche 7 für ein
> Display und 6 oder 8 Eingänge für Schalter und RXD/TXD zur Kommunikation
> mit deinem PC.. Hat irgendjemand ein Vorschlag, wie ich das am besten
> machen könnte? (Vielleicht die schalter über analog..?)
>
> Danke, scooter757

Der ATmega168A hat 22 reguläre I/O-Pins, das sollte doch eigentlich 
reichen...

Wahrscheinlich werden die Pins beim Arduino-Board nicht alle 
rausgeführt, aber man kann sie vielleicht trotzdem irgendwie verwenden, 
wenn man einen Lötkolben benutzt. :-)

von Sigint 112 (sigint)


Lesenswert?

cyblord ---- schrieb:
>> Arduino Duemilanove
>
> Begriffe von Deppen für Deppen.

http://translate.google.de/#it/de/duemilanove

Wirf mal nicht mit Steinen....

von Jürgen S. (jurs)


Lesenswert?

Finn Stutzenstein schrieb:
> Hmm.. ok, werde mir wohl dann noch entweder einen ATmega 168 oder 8
> kaufen müssen... Die haben aber zuwenig IO-Pins.. brauche 7 für ein
> Display und 6 oder 8 Eingänge für Schalter und RXD/TXD zur Kommunikation
> mit deinem PC.. Hat irgendjemand ein Vorschlag, wie ich das am besten
> machen könnte? (Vielleicht die schalter über analog..?)

7 Pins für ein Display?

Erkläre bitte mal genauer, was für ein Display! Also irgendwie ein 
beispielsweise 1602 LCD-Display in 4-Bit Betrieb mit 
liquidcrystal-Library (6 Pins) und ein Pin zum Ein- und Ausschalten der 
Hintergrundbeleuchtung?

> und 6 oder 8 Eingänge für Schalter

Müssen Schalterkombinationen ausgewertet werden können, von gleichzeitig 
gedrückten Schaltern?

Falls vielleicht einige Schalter nur als "entweder - oder" gedrückte 
Taster ausgewertet werden brauchen, von denen nur einer zur Zeit 
gedrückt wird, könnte man ggf. locker bis zu fünf Taster mit 
verschiedenen Vorwiderständen auf einen einzigen Analogeingang legen und 
auswerten.

Beschreibe doch mal genauer, was für ein Display Du anschließen möchtest 
und ob unbedingt Mehrfach-Schaltkombinationen ausgewertet werden müssen 
oder ob es reicht, einzeln gedrückte Taster zu erkennen!

Dann mache ich Dir einen Vorschlag, wo Du am besten Eingänge einsparen 
kannst.

von Finn S. (scooter757)


Lesenswert?

Ich habe ein 16x2 Zeichen Display des Typs Displaytech 162A. 4Bit + RW, 
RS, E, 7 Ausgänge/Eingnge von ATmega. Außerdem möchte ich ein 4 Wege 
Joystick anschließen. Die gegenüberliegenden Richtungen können also nie 
gleichzeitig betätigt werden --> die Idee mit dem Vorwiderständen ist 
super ;).
Dazu noch 2 oder 4 Taster zusätzlich an den µC. Diese könnte ich über 
die anderen 4 analog-Eingänge auslesen.. Dann würde alles passen.
Ich werde jetzt bei zeichelt nen neuen µC bestellen + ein bisschen 
Kleinkrams. Bin gespannt ob das alles funktioniert :)
LG scooter757

von Jürgen S. (jurs)


Lesenswert?

Finn Stutzenstein schrieb:
> Ich habe ein 16x2 Zeichen Display des Typs Displaytech 162A. 4Bit + RW,
> RS, E, 7 Ausgänge/Eingnge von ATmega.

Also ein Standard 1602 LCD Display. Dafür benötigst Du normalerweise nur 
6 digitale Ein/Ausgänge.

RW wird nur dann benötigt, wenn Du nicht nur Daten auf das LCD 
schreiben, sondern auch Daten vom LCD lesen möchtest. Oder wenn das 
"Busy-Flag" gelesen werden soll, ob die Abarbeitung eines Befehls auch 
abgeschlossen ist. Wenn Du aber ein delay von 50 Mikrosekunden einfügst, 
kannst Du den Anschluss von RW einsparen. Freilassen oder auf Ground 
legen.

Und mit noch einem I/O könntest Du eine eventuell vorhandene 
Hintergrundbeleuchtung ein/ausschaltbar machen. Muss ja vielleicht auch 
nicht sein. Also 6 Pins benötigt im Normalfall.

Wenn Du nun aber statt eines "Standard 1602 LCD" ein "I2C Serial 1602 
LCD" verwendest, brauchst Du vier Leitungen weniger. Wäre dann 
allerdings anders anzusteuern. Es gibt entweder gleich fertige "I2C 
Serial 1602 LCD" zu kaufen, oder man kann mit einer kleinen 
Huckepack-Platine ein Standard-LCD zum I2C-Serial-LCD umbauen. 
Erhältlich vom China-Versender, z.B. eBay Artikelnummer: 130748113121
Macht bei Verwendung: 4 digitale I/O eingespart, nur 2 werden benötigt.
Die Ansteuerung des LCD muss dann aber über I2C erfolgen, nicht mehr mit 
der LiquidChrystal Library. Siehe auch:
http://arduino.cc/playground/Code/LCDi2c

> Außerdem möchte ich ein 4 Wege Joystick anschließen.
> Die gegenüberliegenden Richtungen können also nie
> gleichzeitig betätigt werden --> die Idee mit dem Vorwiderständen ist
> super ;).

Hier ist ein Beispiel, wie 5 Buttons mit nur einem Analog-Input 
angesteuert werden:
http://www.instructables.com/id/How-to-access-5-buttons-through-1-Arduino-input/
Oder hier eine Kurzversion: http://rayshobby.net/?p=16
Jeder Button wird quasi mit einem anderen Widerstandswert als 
Spannungsteiler geschaltet und so kann man beim Drücken jedes Schalters 
einen anderen Spannungswert am Analogeingang feststellen. D.h. zum 
Abfragen mehrerer Buttons musst Du immer nur denselben Analogpin 
abfragen, und ob kein oder welcher Button gedrückt ist, ergibt sich über 
den ADC-Messwert.

Schon wieder einige digitale I/O eingespart und dann sollte die Anzahl 
bei einem 168 oder 328 auch passen.

Wenn Du beide Vorschläge berücksichtigst, dann brauchst Du
- für das LCD-Display: 2 digitale I/O
- für vier Buttons: 1 analog I/O

Damit reicht es dann dicke, oder?

von Chr. M. (snowfly)


Lesenswert?

hier:
http://arduino.cc/forum/index.php/topic,24336.0.html
gibt es eine Liste welche AVRs ganz einfach mit Arduino zu benuten sind.

von Mark Weber (Gast)


Lesenswert?

Hallo,

es gibt eine Reihe Arduino-Derivate, die mit den 40-Pin ATMegas 
arbeiten.
Hier ein ATMega32, auf der Seite gibts auch den passenden Bootloader.

http://www.sunduino.pl/index.php/sunduino/143-atmega32-i-arduino-rozwiazane

Gruß
Mark

von Cyblord -. (cyblord)


Lesenswert?

Sigint 112 schrieb:
> cyblord ---- schrieb:
>>> Arduino Duemilanove
>>
>> Begriffe von Deppen für Deppen.
>
> http://translate.google.de/#it/de/duemilanove
>
> Wirf mal nicht mit Steinen....

Nur weil ein Wort irgendwas in irgendeiner Sprache bedeutet, kann es als 
Bezeichnung für etwas trotzdem bescheuert sein.

gruß cyblord

von Finn S. (scooter757)


Lesenswert?

So, Ich melde mich mal wieder. ;) Ich (oder eher mein Vater ;) ) 
bestelle jetzt ein AVRISP mkii, soll ja so der standart-Programmer sein. 
Das mit dem Flashen etc. wollte ich eigentlich machen um genau dieses 
"Bauteil" zu sparen. Aber ich ärger mich jetzt nich weiter damit und 
Programmier einfach in AVR Studio oder irgentwo anders und flashe dann 
die .hex Datei über AVR Studio. Dann sollte alles funktionieren. Wenn es 
Probleme gibt, und Google mir nicht helfen kann, schreibe ich nochmal.

Danke für die Hilfe, scooter757 :)

P.S.: Das hier hörte sich gut an, war leider auf der AurduinoIDE 0011 
aufgebaut --> zu alt und der ganze Verlauf etwas verwirrend..

von Finn S. (scooter757)


Lesenswert?

Soo freu Alees funktioneirt, nach einer kleinen eingewöhnung in AVR 
Studio :)
Hab nurnoch eine Frage.. Ich hab einen externen 16Mhz Quarz an dem 
ATmega dran... Die Fuse SUT_CKSEL ist jetzt auf INTRCOSC_1MH_6CK_64MS 
--> also der interne 1Mhz Osc.. Jetzt gibt es aber so viele andere.. 
z.b. EXTRCOSC_XX_0MHZ9_3MHZ_18CK_0MS und weitere.. welche ist denn der 
ganz normale 16Mhz Quarz??

Aber schon mal danke an euch :)
Super Forum;)
LG scooter757

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.