Programmieren von ATtinys?

Hallo NG!

Hat jemand von Euch schon praktische Erfahrungen mit Atmel ATtinys gesammelt oder kennt sich sonstwie damit aus?

Hintergrund der Frage: Für ein kleines Projekt suche ich einen µC, der mindestens 8 Ausgänge und 2 DAC-Eingänge haben muß und andererseits aus Platzgründen möglichst klein sein sollte[1]. Dabei bin ich auf den ATtiny24 gestoßen, der diese Forderungen recht gut erfüllen würde. Was mich allerdings irritiert: Alle Pins (mit Ausnahme von VCC und GND) sind doppelt, dreifach oder noch öfter belegt - bis hin zur RESET-Leitung, die sich den Pin mit einer B-Port-I/O-Leitung teilt. (Und "natürlich" auch die Datenleitungen, die man zur IS- Programmierung braucht.) Soweit ich die Sache aber bislang verstanden habe, ist die Reset-Leitung z.B. essentiell zur IS- Programmierung.

Lange Rede, kurzer Sinn: Wie stellt man bei einem solchen "überfrachteten" IC die Programmierung an? Muß ich (z.B. über Jumper) sicherstellen, daß die restliche Elektronik vom µC getrennt wird, wenn ich ihn flashen möchte?[2] Und wie würde das ganze funktionieren, wenn ich z.B. den Reset-PIN in einem bereits aufgeflashten Programm als Input-Leitung definiert hätte?[3]

TIA,

Sebastian _____ Anmerkungen: [1] Bevor jetzt Vorschläge mit BGAs oder QFNs kommen - ich will die zugehörige Platine noch "am Küchentisch" herstellen und bestücken können. :-) [2] Jedenfalls an den Pins, die zum ISP gehören. [3] Habe ich zwar in meinem konkreten Fall nicht vor, aber 'mal grundsätzlich gefragt.

--
Ich WEISS was ich tue ;-)
Und wenns mal wieder Knallt, weiss ich auch genau, warum ich
mich in den Hintern treten sollte ;-)
                                 [Michael Buchholz in d.s.e]
Reply to
Sebastian Suchanek
Loading thread data ...

Sebastian Suchanek macht die Ingrid:

s/DAC/ADC/ :-)

Tschüs,

Sebastian

--
Ich WEISS was ich tue ;-)
Und wenns mal wieder Knallt, weiss ich auch genau, warum ich
mich in den Hintern treten sollte ;-)
                                 [Michael Buchholz in d.s.e]
Reply to
Sebastian Suchanek

Um den Reset-Pin als IO-Pin zu benutzen, mußt Du RSTDISBL aktivieren und damit auf das normale ISP sowie Debugwire verzichten und brauchst einen Programmer, der High-voltage serial programming kann - z.B. AVR-Doper.

Wenn Du den Controller in der Schaltung programmieren willst, muß die Pinbeleging der an den ISP-Pins angeschlossenen Peripherie natürlich passen, so daß die ISP-Funktion nicht gestört wird. Bei Pins, die als Eingang benutzt und von extern getrieben werden, kann da ein Serienwiderstand helfen

- einfacher ist es, wenn die ISP-Pins im Normalbetrieb Ausgänge sind und die angeschlossene ELektronik die beim Programmieren anliegenden Pegel verkraftet.

cu Michael

--
Some people have no respect of age unless it is bottled.
Reply to
Michael Schwingen

Thus spoke Michael Schwingen:

Danke für Deine Ausführungen. Kannst Du mir evtl. einen Tip geben, wo ich nähere Informationen finde, was es mit dieser "high voltage"-Programmierung auf sich hat, also wie das funktioniert und wo die Unterschiede zum normalen ISP sind? Google war leider nicht besonder kooperativ.

Tschüs,

Sebastian

--
Ich WEISS was ich tue ;-)
Und wenns mal wieder Knallt, weiss ich auch genau, warum ich
mich in den Hintern treten sollte ;-)
                                 [Michael Buchholz in d.s.e]
Reply to
Sebastian Suchanek

Sebastian Suchanek schrieb:

Z. B. unter `memory programming' im Datenblatt.

Kurz und gut, HV-Programmierung ist nicht die Methode der Wahl, um die Dinger in der fertigen Schaltung zu programmieren. Du kannst diese Variante natürlich benutzen, um sie vorab in einem Programmiergerät zu programmieren, aber da das dann die Erstprogrammierung ist, würde dafür selbst dann noch ISP-Programmierung ausreichend sein, wenn du abschließend die RSTDSBL-Fuse setzt, um /RESET als IO-Pin zu nutzen.

Normalerweise wird man das aber nur für eine Massenproduktion machen, bei der man später sowieso keine Firmwareupgrades mehr vornehmen kann, oder aber in Geräten, bei denen der Firmwareupgrade über einen Bootloader vorgenommen werden kann. Für das typische Bastlerprojekt, bei dem man am laufenden Band neu programmieren muss, wird man die RSTDSBL-Fuse in der Regel meiden... Würden dir ja beim ATtiny24 immer noch 11 Leitungen als IO-Pins verbleiben, sofern du die ISP-Leitungen irgendwie verträglich mit dem Rest der Schaltung bekommst (*) oder aber (wie du schon gemerkt hast) durch Jumper umschaltbar machen kannst.

Falls du natürlich ohnehin eine RS-232-Schnittstelle mit vorsehen willst, kannst du dich auch gleich auf die Variante mit dem Bootloader einschießen. Den entwickelst du dann normal über ISP extern, ohne die endgültige Schaltung schon zu nutzen. Wenn er geht, hast du anschließend die ISP-Pins frei.

(*) Wenn das Programmiergerät genug Treiberleistung hat, könnten zur Entkopplung u. U. sogar ein paar Widerstände hinreichend sein.

--
cheers, J"org               .-.-.   --... ...--   -.. .  DL8DTL

http://www.sax.de/~joerg/                        NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)
Reply to
Joerg Wunsch

Thus spoke Joerg Wunsch:

Erstmal auch Dir Danke! :-)

ACK. Ich gebe mich keinerlei Illusionen hin, daß ich den Code auf Anhieb richtig hinbekomme. :-)

Theortisch stimmt das zwar, praktisch würde ich das nur recht ungern tun wollen. Es geht um eine achtkanälige "Software-PWM" für zwei Vierergruppen. Wenn ich zumindest die beiden Vierergruppen (oder besser alle acht Ausgänge) auf den (jeweils) gleichen Port lege, erhoffe ich mir davon eine effizientere Programmierung der entsprechenden Interruptroutine und damit letztendlich eine möglichst hohe PWM-Schaltfrequenz.

Ich denke, ich werde auf den ATtiny26 ausweichen. Der ist zwar SO20 statt SO14, aber dessen Pin-Belegung hilft mir neben dem ursprünglichen Problem auch gleich noch über ein weiteres[1] hinweg.

Tschüs,

Sebastian _____ Anmerkungen: [1] Laut Datenblatt soll man ja keine I/O-Operationen auf einem Port durchführen, während auf einem Pin eine A/D-Wandlung läuft.

--
Ich WEISS was ich tue ;-)
Und wenns mal wieder Knallt, weiss ich auch genau, warum ich
mich in den Hintern treten sollte ;-)
                                 [Michael Buchholz in d.s.e]
Reply to
Sebastian Suchanek

Die einfachste Lösung ist, das Teil zu Sockeln und zum Programmieren einfach herauszunehmen und auf den Sockel des Programmieradapters zu stecken.

Nicht unbedingt. Man kann auch die Schaltung so auslegen, daß Programmierung möglich bleibt. D.h.: Alle für ISP mitbenutzte Ports nur als Ausgänge benutzen (und dafür sorgen, daß sie nicht gerade Sachen treiben, denen "falsche" Pegel und Flanken irgendwelche Schäden zufügen). Ausnahme ist halt der Reset-Pin. Das Port-Bit kann nicht benutzt werden, wenn du ISP-Funktionalität haben willst, so einfach ist das.

Garnicht. Entweder Reset oder Port. Das Programm hat damit nichts zu schaffen, das wird über ein Fuse-Bit festgelegt.

Steht doch alles im Datenblatt. Hast du das nicht gelesen?

Reply to
Heiko Nocon

Moin!

Zur Reset-Leitung wurdest Du ja schon beraten, die genehmigt man sich wirklich nur in Sonderfällen als zusätzliche I/O-Leitung.

Die ISP-Leitungen mehrfach zu benutzen, ist meist kein Problem. Es braucht auch nicht zwingend eine Entkopplung, man muss nur ein wenig darüber nachdenken, was schlimmstenfalls passieren kann. Beispiele:

- ISP-Pins werden als Ausgang benutzt und steuern LEDs an. Hier kann der Programmer einfach parallel dran, sollen die LEDs doch blinken beim Programmieren, wen störts....

- ISP-Pins werden als Ausgang benutzt und steuern einen Motor über eine Vollbrücke mit richtig Wumms und ohne shoot-through-protection an. Darauf würde ich verzichten. :-)

- ISP-Pins werden als Eingang benutzt, die Quelle ist niederohmig: Programmieren wird nicht funktionieren.

- Und was ich meistens mache: An den ISP-Pins hängt ein SPI-Bus mit anderen Komponenten. Der Controller ist Master, die anderen Komponenten werden mit /CS bzw. /SlaveSelect über I/O-Leitungen aktiviert, letztere bekommen einen Pullup-Widerstand. Zieht der Programmer am Reset, so werden die I/O hochohmig, die Pullups ziehen die /CS-Leitungen hoch, die anderen SPI-Komponenten gehen auf Durchzug und ich kann den Controller programmieren.

Gruß, Michael.

Reply to
Michael Eggert

Sebastian Suchanek schrieb:

Ja, gut, klingt vernünftig. Du kannst übrigens gleich den Nachfolger ATtiny261 einplanen bzw. dessen größere Geschwister ATtiny461 und ATtiny861. Die sind pinkompatibel, und man kann sie mit dem AVR Dragon über debugWire live im Gerät debuggen.

Das hängt damit zusammen, dass die Ausgangstreiber des entsprechenden Ports von AVcc versorgt werden. Wenn die beim Umschalten Strom ziehen, bricht AVcc u. U. geringfügig ein (wird ja in der Regel über eine kleine Drossel von Vcc versorgt) und kann dir die Messung versauen.

--
cheers, J"org               .-.-.   --... ...--   -.. .  DL8DTL

http://www.sax.de/~joerg/                        NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)
Reply to
Joerg Wunsch

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.