Forum: Mikrocontroller und Digitale Elektronik µC Betrieb mit 3.3 V Programmieren geht nicht.


von Michael K. (onkel_michi)


Lesenswert?

Ich habe mir nach langem Ringen nun doch ein Board zusammengebastelt,
auf dem ich den LANTronix XPORT fest mit einem ATmega32 zusammen
betreiben will.

Nachdem ich aus Tipps hier im Forum und im Roboter-Netz dann auch
rausbekommen habe, wie ich den MAX 3232 richitg und sinnvoll in dieser
Kombination einsetze und welcher Spannungsregler für die 3,3 Volt
richtig und gut ist, kommt nun das nächste Problem.

Ich besitze 3 ISP-Prgrammer, aber keiner davon ist brauchbar um einen
ATmega32 in einer 3.3 Volt Umgebung zu programmieren.

Der STK500 kompatible von egnite (wurde mit meinen Ethernut zusammen
geliefert) braucht mindestens 5 Volt Betriebsspannung und würde die
Teile, die an den Programmierpins angeschlossen sind beim Programmieren
mit den 5V Impulsen zerlegen.

Der STK300 geht auch nur mit 5 Volt und das Ding mit den Widerständen
für den Parallelport am PC würde auch die Schaltung beschädigen.

Nun baue ich jedesmal den ATmega aus, um den zu programmieren, aber das
kann es ja nicht sein.

Hat jemand eine Idee, wie ich das Problem lösen könnte ? (Das 3.3 Volt
Problem rührt übrigens daher, das der Xport nur 3.3 V darf und sonst
beschädigt wird.)

Alternativ würde ich auch eine Idee nehmen, wie ich den Pegel der RX/TX
Leitungen am ATmega auf 3.3 V-Pegel bekomme, ohne Spannungsteiler zu
verwenden. Dann könnte ich den Rest der Schaltung ja mit 5 Volt laufen
lassen. (Würde mein Problem mit dem LCD Display dann auch lösen.)

Danke für alle Tipps und Anregungen.

von TravelRec. (Gast)


Lesenswert?

Mach doch in die Programmierleitungen vom erstgenannten ISP 2kOhm
Widerständer ´rein (über einen kleine Steckplatine, kann man dann bei
Bedarf zwischenstecken), dann kannste auch in der 3.3V Umgebung
programmieren. Die im ATMEGA vorhandenen Schutzdioden leiten die
überschüssige Spannung ab.

von Michael K. (onkel_michi)


Lesenswert?

Ist denn dann Gewährleistet, das der ATmega auch programmiert wird ?
Außerdem drängt sich mir da die Frage auf, ob die Ausgänge von dem AVR
in dem Programmieradapter nicht unter dem Experiment leiden.

Gibt es eigentlich einen Programmer, der mit 3.3 V läuft?

von Peter Dannegger (Gast)


Lesenswert?

Am STK500 kannst Du doch VTarget runtersetzen.

Und wenns ein ATMega32L ist, dann sollte er auch programmierbar sein.


Peter

von leif (Gast)


Lesenswert?

Wenn ich das richtig interpretiere, kann der AVRISP ab 2.7 V

Aus dem Windows-Helpfile:

> The AVRISP will draw maximum 50mA @ 5.5V

> Make sure the target Voltage is within specified range of the
programmer (2.7V - 5.5V).

von TravelRec. (Gast)


Lesenswert?

Bei der o.g. Widerstandsvariante kannst Du nicht viel verkehrt machen.
Du darfst nur nicht die Plusleitungen (Vcc) verbinden, also die externe
Schaltung und der ISP-Programmer müssen getrennte Spannungsversorgungen
haben. Die Massen werden zusammengeschaltet. Bei der Bemessung der
Widerstände lege 5V - 3,3V = 1,8V zugrunde, über 2,2k sind 0,82mA, die
die obere Schutzdiode worst-case schlucken muß. Da die auch noch ´ne
Flußspannung hat, verringert sich der Strom auch noch weiter. Die Ports
haben also nichts zu befürchten. Wenn Du ganz sicher gehen willst,
nimmst Du noch größere Widerstände. Zum Probieren wär´s doch allemal
ein Versuch, bevor Du Dir noch anderes Equipment zulegst oder noch 100x
den Prozi aus der Fassung reißt.

von Michael K. (onkel_michi)


Lesenswert?

So,

ich habe die Widerstandsvariante eben ausprobiert (2,2 k).
Klappt nicht...

Avrdude erkennt den Programmer und schickt auch die Daten los, aber
nachdem das Programm und die Daten fehlerfrei übertragen sind, tut´s
der ATmega nicht.

Zur Kontrolle habe ich den ATmega aus der Fassung geholt und in der 5V
Platine programmiert Gleicher Programmer, gleiche Software, gleicher
Befehl.
Da hat alles super geklappt.

Werde wohl doch nach einem 5V ---> 3.3 V Umsetzer für die serielle
Schnittstelle suchen müssen. Der Xport ist, nach mehrmaligem Umplanen,
das Einzige geblieben, was wirklich nur 3,3 V ab kann.

von Max (Gast)


Lesenswert?

Ein Transistor-Array (z.B. ULN2003) könnte eine Pegelwandlung erledigen.
Die Transistoren schalten nur Masse durch, den High-Pegel bekommst Du
durch einen Pull-Up gegen die entsprechende Spannung.
Oder ein 74XX07 (oder wars der 74xx06?) - das ist ein 6-Fach Verstärker
mit Open-Collector Ausgängen. Hier schalten die Ausgänge auch nur Masse
durch.

von Peter Dannegger (Gast)


Lesenswert?

Ist Dein AVR denn auch wirklich ein L-Typ ?


Peter

von TravelRec. (Gast)


Lesenswert?

Zum Untermauern meiner These betreibe ich einen original Atmel AVR-ISP
an 5V. In die Programmierleitungen habe ich o.g. Widerstände eingefügt.
An einem 3V Akku habe ich eine externe Schaltung mit einem ATTiny2313
bei 4MHz. Diesen programmiere ich ohne Probleme mit dieser Variante,
SPI-Frequenz bei 200kHz.

von ToniT (Gast)


Lesenswert?

Vieleicht ne blöde Idee aber ...

Wenn Du eh einen Max2323 auf deinem Board hast, warum benutzt Du dann
keinen Bootloader ? Z.B. der Bootloader von Microsyl leistet bei mir
immer gute Dienste. Mittlerweile sehe ich auf keinem Board was RS232
hat die ISP Pins mehr vor. Für die erste Programmierung setze ich den
AVR dann immer in ein kleines Board mit Textool Sockel, setze die Fuses
und schreibe den Bootloader, gut ist.
Oder hab ich jetzt was überlesen und du willst ausdrücklich keinen
Bootloader ?? Wenn ja vergiss meinen Beitrag :)

Wenn Du auf dem Board beide Spannungen zur Verfügung hast könntest Du
den Pegel ja auch über Transistoren anpassen und auf Spannungsteiler
verzichten.

von TravelRec. (Gast)


Lesenswert?

Nee, blöd ist die Idee nicht. So ein Bootloader ist ja ganz toll. Aber
nur auf größeren Prozis, die genüged Speicher haben, so daß deren
Benutzung durch den Loader nicht weiter in´s Gewicht fällt. 512 Worte
sind nun mal 512 Worte. Ganz davon abgesehen, daß man auch den EEPROM
gelegentlich für eigene Sachen braucht.

von Peter Dannegger (Gast)


Lesenswert?

@TravelRec.

"Aber nur auf größeren Prozis, die genüged Speicher haben,"

Wenn jetzt schon Deinem ATMega32 die Puste ausgeht wegen 3% Code, dann
solltest Du besser gleich was größeres nehmen.

Ich setze den Bootloader aufm ATMega8 ein und haben keine Probleme
wegen der 7kB statt 8kB.


"daß man auch den EEPROM gelegentlich für eigene Sachen braucht."

Der Bootloader (zumindest meiner) braucht den EEPROM nicht, er steht
Dir also voll zur Verfügung und läßt sich auch per Bootloader
vorbelegen.


Peter

von papa_of_t (Gast)


Lesenswert?

Also ich programmiere ATMega8, auch wenn es keine L-Typen sind, über SPI
mit 3V ohne jedes Problem - allerdings nicht mit dem STK500 sondern so
wie hier gezeigt:

http://www.rowalt.de/mc/avr/avrboard/01/avrb01.htm

(Mitte der Seite). Habe auch festgestellt, daß die sogar noch bei unter
3V klaglos laufen, so daß man einfach 2 AAA - Batterien als "Netzteil"
nehmen kann..

von Daniel B. (khani)


Lesenswert?

Hallo,

ich habe hier auf dem ATmega32 einen Bootloader laufen (angepasster
AVR109 - Bootloader). Auf dem ATmega32 laufen zahlreiche
speicherfressende (also Flash ...) Anwendungen und das Flash ist gerade
mal zu 40% voll.
Nimm einfach einen Bootloader Deiner Wahl - das scheint die einfachste
und praktikabelste Lösung zu sein. Außerdem muss man beim Bootloader
keine Angst haben, irgendwelche Hardware zu beschädigen.

MfG, Daniel

von TravelRec. (Gast)


Lesenswert?

@Peter:
Der ATMEGA32 ist schon groß, keine Frage. Auch der 16er reicht für ´ne
ganze Menge Code. Ich denke da eben eher an den ATMEGA8 oder die
Tiny2313. Da schlägt so ein universelle Loader schon recht heftig ein.
Sicherlich wäre in dem Fall ein weniger aufwändiger Loader denkbar, de
eben nur funktioniert und keinen Luxus bietet.
Oben genannter Bootloader braucht EEPROM und FLASH, deswegen meine
Anspielung.

@papa_of_t:
Das geht bei Dir wahrscheinlich deswegen, weil Dein LPT beim
Programmieren in die Knie geht und somit die Pegel wieder passen ;-)

von papa_of_t (Gast)


Lesenswert?

nee, da ist doch 'n Elko drin im Programmierstecker, und auch wenn ich
nicht programmiere, messe ich da nur ca. 3V - reicht aber aus,
zumindest bei mir glück gehabt :-) ...

von Michael K. (onkel_michi)


Lesenswert?

Also zunächst einmal danke für die vielen Tipps.

@papa_of_t
Ich werde mal meinen Programmieradapter mit den Widerständen so wie den
in dem Link "frisieren", mal sehen, was dabei herauskommt.

@ToniT
Ich habe sogar einen MAX 3232 auf dem Board, weil ich den XPORT durch
Jumper mal als Netzwerkinterface für den ATmega32, mal als
Schnittstelle für Netzwerk <--> RS232 und den MAX 3232 als RS232
Adapter für den ATmega32 verwenden will. Das tut Deiner Idee mit dem
Bootloader aber keinen Abbruch. Ich suche nur nach einem Bootloader,
bei dem das Ladeprogramm auf dem PC unter Linux läuft. (Das System mit
dem Fähnchen habe ich nicht.)

@all
Danke für alle Tipps und Hinweise, werde leider erst am Wochenende
wieder dazu kommen, mich dem Experiment zuzuwenden.

von Jojo S. (Gast)


Lesenswert?

Kann der XPort nicht die Daten vom Ethernet an die serielle durchreichen
? Dann könnte man mit einem Bootloader sogar bequem übers Netzwerk den
Upload machen.

von Michael K. (onkel_michi)


Lesenswert?

Durch den XPort habe ich ja erst das Problem, das ich 3.3 Volt brauche.

Ich musste mein Experimentierboard komplett auf 3.3 V umstellen, eine
zusätzliche 5 Volt Versorgung für den Programmieradapter schaffen und
für das LCD Display mit der Hintergrundbeleuchtung.
Ich kann aber nicht einfach den ATmega32 mit Vcc 3.3 Volt betreiben und
dann mit einem STK 500 kompatiblen / STK 300 (Die ja 5 Volt zum arbeiten
brauchen programmieren.)

Wenn der XPORT nicht nur 5 V tolerant sondern dauerhaft 5 Volt
aushalten könnte, dann hätte ich das Problem nicht.

Eine Software für den ATmega über den XPort zu flashen, für Linux habe
ich noch weniger gefunden, wie eine Software, die unter Linux läuft,
mit der man über einen Bootloader den ATmega flashen kann.

Danke aber für die Anregung.

von ToniT (Gast)


Lesenswert?

@Michael: Wenn Du Dich ein wenig mit Bootloader Materie befassen willst
und kein Windoof System hast, dann schau Dir doch mal den Bootloader
von Peter Dannegger an :
http://www.mikrocontroller.net/forum/read-4-53146.html#new

Ich glaube der benötigt nur ein Terminalprogramm bzw. ein ganz
einfaches Protokoll.

von Rick Dangerus (Gast)


Lesenswert?

@Onkel_Michi

Ich hab den Bootloader von Herbert Dingfelder, www.dl5neg.de mit uisp
(Linux) zum Laufen bekommen. Der Bootloader emuliert einen AVR-ISP nach
dem Protokoll aus dieser AVR910 Appnote. Eine kleine Anpassung an die
eigene Hardware war nötig. Im Makefile steht dann sowas:

setserial /dev/ttyS0 spd_vhi low_latency
uisp -dprog=avr910 -dpart=auto -dspeed=115200 --erase --verify --upload
if=$(TARGET).hex
echo "E" > /dev/ttyS0

Und schon lief das ;-)

Rick

von Michael K. (onkel_michi)


Lesenswert?

Hallo Rick,

eigentlich wollte ich ja erst am Wochenende weitermachen, aber Ihr
zwingt mich dazu, doch noch mehr zu machen.

Die Links mit den Bootloadern habe ich nun durch. Es liest sich alles
ganz prima. Das sollte kein Problem darstellen.

Trotzdem ist mein Problem damit immer noch nicht vollständig gelöst.

Schließlich kann ich ja nicht jeden Käfer, denn ich in dem Board
verwende, mit einem Bootloader versehen.

Alle Anregungen aus diesem Thema habe ich nun gespeichert und werde die
nach und nach ausprobieren.

Ausserdem werde ich unabhängig davon nun einen Adapter basteln, der die
Programmierleitungen auf der richtigen Seite auf die richtige Spannung
bringt.

Wenn ich bei 3.3 V die SCK  MOSI  MISO Leitungen auch nur mit 3.3 V
betreibe, lässt sich der ATmega32 dann auch programmieren ?

Seid mir nicht böse, aber zunächst einmal wollte die konventionelle
Lösung üben, bevor ich voll auf Bootloader umsteige.

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.