Hallo,
mit meinem 1. Post oute ich mich direkt als Anfänger, aber ich habe eine
Frage:
Ich habe eine Schaltung entworfen, die mit einem AtMega328P ein
WS2812b-LED-Strip steuert. Im Betrieb wird das ganze über eine externe
Stromquelle mit Spannung versorgt (bis zu 1A), soweit so gut.
Jetzt zu meiner Frage, wenn ich den uC neu programmieren will über ISP
(Arduino as ISP / USBASP kommt noch), wie verhindere ich, dass der
Arduino-Programmer/USBASP durch die Last des LED-Stips überlastet wird,
da ja die +5V und GND jeweils verbunden sind. Wie löst man soetwas
geschickt? Meine Ideen waren:
- Externe Spannung angeschlossen lassen
- Schalter um Strip zu trennen
- Diode zwischen +5V vom ISP+uC und externe Spannung+LED
Bin über jede Hilfe dankbar.
Vielen Dank für eure Hilfe,
Jan
Wenn Du jetzt nur eine Platine hast, die Du ggf. öfter programmieren
willst, dann ist ein schalter, ein Jumper oder einfach eine
Steckverbindung, mit der Du die Last vorrübergehend trennen kannst,
eigentlich ausreichend.
Wenn Du mehrere dieser Platinen machen willst - oder täglich daran
arbeiten willst, dann würde ich eine Diode einsetzen.
Alternativ verbindest du den VCC-Pin vom ISP-Anschluss nicht. Dann
kannst du die Schaltung aber auch nicht ohne externe
Spannungsversorgung programmieren.
Und manche Programmiergeräte brauchen den Anschluss - der ist eigentlich
soweit ich weiß allerdings gar nicht dafür gedacht, den Controller beim
Programmieren zu versorgen, sondern dafür, dass das Programmiergerät die
in der Schaltung verwendete Betriebsspannung erkennen und die korrekten
Logikpegel setzen kann. Auch wenn 99% der Leute ihn anders verwendet.
MfG, Arno
Danke euch.
@Arno: Das werde ich mal probieren. Also nur die GND, MISO, MOSI Und
reset vom Arduino als ISP. Das board zu versorgen ist beim programmieren
kein problem.
Danke euch!
Ein sauberer AVR-Programmer versorgt das Target gar nicht, sondern nutzt
die Spannung des Targets zur Einstellung der Pegel oder (z.B. AVRISP
ohne mkII) zur eigenen Versorgung.
Am besten kaufst Du also einen Programmer, bei der man die Versorgung
des Targets zumindest abschalten kann.
Der Unterschied zwischen Programmier-mode und Run-Mode ist der Reset
Pin. Der Reset ist Low im Reset, sonst high.
Im Reset sind die Ports auf Tristate. Waehrend dieser Zeit muessen
irgendwelche Peripherie Circuits natuerlich sicher sein. Also hoechst
wahrscheinlich deaktiviert. Daher muss man die Pegel wo noetig per
externer Widerstaende auf Low oder high vorgeben. Das sind dann die
Pegel, die waehrend des Resets anliegen.
Steht aber alles im Datenblatt.
Habt ihr nen Tipp für nen guten (günstigen) Programmer? Habe den usbasp
bei aliexpress bestellt. Falls jemand eine gute Idee für einen Anfänger
hat,gerne.
Danke,
Jan
PS: die Pins zum programmieren sind nicht doppelt belegt. Hab nur Angst,
dass die Lasten an +5 zuviel sind während ich den Programmer anschließe.
Wie schon gesagt, irgendwelche Lasten sollten im Reset abgeschaltet
sein. Denn du weisst ja nicht wie lange der Reset dauert. Wenn das Ganze
dann abfackelt ...
Der Reset dauert solange bis ein sinnvolles funktionierendes Programm
aufgespielt ist. Zwar ist der Reset pin nicht zwingend low, aber
unprogrammiert sind die Ports zB Tristate, oder etwas anderes.
Sinnvollerweise entkoppelt man die Signalpins mit 100 Ohm in Serie. Und
der Speisepin auf dem ISP sollte kurzschlussgeschuetzt sein. Resp, die
Speisung des Programmers sollte kurzschlussgeschuetzt sein.
Jan schrieb:> Wie löst man soetwas> geschickt? Meine Ideen waren:> - Externe Spannung angeschlossen lassen> - Schalter um Strip zu trennen> - Diode zwischen +5V vom ISP+uC und externe Spannung+LED
Hallo,
am Anfang habe ich immer eine Diode gelötet. Später habe ich kapiert,
daß das nicht unbedingt notwendig ist, wenn man DIAMEX ALL
AVR-Programmer USB-ISP benutzt: dort gibt es zwar Option, Schaltung von
Programmer zu speisen, aber das ist eine Option, d.h. man kann sie
abschalten.
Normalerweise lasse ich 5 Volt-Pin in ISP frei.
Super, danke für eure Hilfe. Bei mir hat es auch eben "klick" gemacht,
einfach die Versorgung (in meinem Fall Arduino als ISP) weggelassen und
es geht.
Danke!