Hallo Forum,
bei meiner Schaltung (siehe Anhang) taucht ein Problem auf, welches ich
mir nicht erklären kann.
Die gleiche Schaltung hatte ich vorab auf einem Steckbrett mit Atmega
168PA statt Attiny85 aufgebaut.
Der Code ist ebenfalls der gleiche (abgesehen vom verwendetetn Timer und
andrem ADC-Pin).
Auf Steckbrett und Atmega168 läuft alles wie es soll.
Bei der Attiny85 Schaltung kommt es leider zu Problemen.
Bsp. soll der N-Mosfet nach einer Aktion für 30 Sekunden abschalten und
dann wieder einschalten (und damit den P-Typ Schalten), tut er auch,
Zeit passt. Ab dem Abschaltzeitpunkt soll eine LED für 2 Minuten rot
blinken. Das tut sie nur beim Atmega168 aufbau. Beim Attiny ist nach 30
Sekunden Schluss mit blinken (scheinbar sobald der N-Mosfet wieder
durchgeschaltet wird).
Weiteres Beispiel:
Der N-Mosfet soll bei anlegen der Betriebsspannung an die Schaltung
sofort schalten und die rote LED hektisch blinken. Tut sie meistens,
manchmal muss ich die Versorgungsspannung mehrfach abstöpseln und wieder
dran damit dies passiert.
Auf dem Steckbrett mit Atmega168 klappt alles wie gewünscht.
Scheinbar hat es etwas mit dem Schalten des/der Mosfets zu tun, dass
dies irgendwie die Register des Tiny85 durcheinander bringt. Aber,
warum? Und Warum dann nicht auch beim Atmega168.
Tiny und Atmega laufen mit den internen voreingestellten 8Mhz ohne
CKDIV8.
Nur am Rande: Die im Schaltplan dargestellten 12V sind nur 9V.
Carsten schrieb:> Scheinbar hat es etwas mit dem Schalten des/der Mosfets zu tun
Eher mit dem, was der MOSFET schaltet...
> dies irgendwie die Register des Tiny85 durcheinander bringt. Aber,> warum? Und Warum dann nicht auch beim Atmega168.
Mit Tiny85 vs. Mega168 hat das vermutlich nichts zu tun. Eher damit,
dass halt der Aufbau unterschiedlich ist. Eventuell auch die
Stromversorgung?
...nur eben der Controller ist auf dem Steckbrett ein anderer. Der
Attiny85 sowie der Rest sitzen jetzt auf einer geätzten Platine, kein
Steckbrettverhau mehr.
Tritt der Fehler denn auch mit’m Tiny auf dem Steckbrett auf? Wenn nein,
liegt’s nicht am μC, sondern möglicherweise an anderen Sachen, die
anders sind.
Carsten schrieb:> Der Code ist ebenfalls der gleiche (abgesehen vom verwendetetn Timer und> andrem ADC-Pin).
Die Register haben aber unterschiedliche Befehle zu dem ATmega.
Den Attiny versuchsweise aufs Steckbrett zu stecken ist leider
schwierig, da ich den nur in der SMD Version da habe und verwende.
Was ich gerade überlegt habe und versuchen könnte wäre, das
Port-Register nach jedem Mosfetstart aufs Neue zu initialisieren.
Also DDRB versuchsweise neu initialisieren und schauen ob das Abhilfe
schafft. Könnte man das so machen oder ist das quatsch?
Carsten schrieb:> manchmal muss ich die Versorgungsspannung mehrfach abstöpseln und wieder> dran damit dies passiert.
Dann enable mal das Brown-Out Reset.
Das einfache Power-On Reset nur mit Zeitglied kann gerne mal
fehlschlagen, wenn die VCC nicht schnell und monoton von 0V an ansteigt.
Du kannst auch an einem Pin per SW-UART Debugausgaben senden und dann in
einem Terminalprogramm anzeigen:
Beitrag "Re: ATtiny44 -Software Uart - nur senden"
Carsten schrieb:> Der Code ist ebenfalls der gleiche (abgesehen vom verwendetetn Timer und> andrem ADC-Pin).
Leg mal beide Datenblätter nebeneinander. Teilweise sind die
Konfigurationsbits für Timer etc. auf unterschiedlichen
Registeradressen.
Gelegentlich sind auch die möglichen Prescaler der Timer verschieden.
Da reicht es dann nicht, nur den MCU-Typ anzupassen.
Danke für die Hinweise,
habe damit etwas rumprobiert und festgestellt, dass der Controller
resetet, sobald der Mosfet durchschaltet (...und damit einen Verbraucher
schaltet). Scheinbar bricht die Versorgungsspannung kurzitig ein. Leider
kann ich das mangels Oszilloskop nicht überprüfen.
Bei der Beschaltung des LM7805 hatte ich mich an das Datenblatt von ON
gehalten (300nF am Eingang und 100nF am Ausgang).
Sollte ich zusätliche Elkos verwenden?
Wenn ja wo? 47µF am Eingang vom LM7805?
Carsten schrieb:> Sollte ich zusätliche Elkos verwenden?> Wenn ja wo? 47µF am Eingang vom LM7805?
Schwer zu sagen, ohne dass wir dein Netzteil und deine Last kennen.
Normalerweise sollte das Netzteil die Last treiben können, ohne beim
Einschalten abzusacken. Also versuche zuerst ein besseres Netzteil.
Ist die Last kapazitiv? Wenn ja, brauchst du eventuell eine
Einschaltstrombegrenzung.
Wenn gar nichts geht, könntest du die Stromversorgungen von Last und
Mikrocontroller separieren. Oder so halb trennen:
1
1N4001
2
3
12V o-----|>|---+----[5v Regler]-----o 5V
4
| |
5
470µF === |
6
| |
7
GND GND
Die kleinen Kondensatoren am Spannungsregler sollen natürlich bleiben.
Der 470µF käme zusätzlich dazu.
Sinn der Sache ist: Wenn die 12V kurz absacken, wird der Mikrocontroller
aus dem 470µF Elko versorgt. Die Diode verhindert, dass der Kondensator
auch die Last versorgt (dafür wäre er zu klein).
Carsten schrieb:> habe damit etwas rumprobiert und festgestellt, dass der Controller> resetet, sobald der Mosfet durchschaltet (...und damit einen Verbraucher> schaltet).
Wie ich vermutete hatte...
> Scheinbar bricht die Versorgungsspannung kurzitig ein. Leider> kann ich das mangels Oszilloskop nicht überprüfen.
Du hast es im Prinzip überprüft. Der Controller resettet ja
offensichtlich.
> Bei der Beschaltung des LM7805 hatte ich mich an das Datenblatt von ON> gehalten (300nF am Eingang und 100nF am Ausgang).>> Sollte ich zusätliche Elkos verwenden?> Wenn ja wo? 47µF am Eingang vom LM7805?
Die Eignung irgendwelcher Gegenmaßnahmen kann man nur sinnvoll
abschätzen, wenn man weiss, was da genau geschaltet wird. Du hättest
einfach mal meine Fragen beantworten sollen!
Bernd schrieb:> Leg mal beide Datenblätter nebeneinander. Teilweise sind die> Konfigurationsbits für Timer etc. auf unterschiedlichen> Registeradressen.> Gelegentlich sind auch die möglichen Prescaler der Timer verschieden.>> Da reicht es dann nicht, nur den MCU-Typ anzupassen.
Habe ich schon geschrieben, dass der ATmega und der Tiny teilweise
völlig anders programmiert werden, im Bereich der Register.
Deshalb nehme ich auch den Tiny10, weil die Programmierung da gleich
ist.
So kann ich das bequem auf einem Arduino testen, dann nur die Pins um
schreiben und auf den Tiny braten, auflöten und fertig.