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?
Auch das Netzteil ist das gleiche.
Carsten schrieb: > Auch das Netzteil ist das gleiche. OK, und was für eins genau? Und was genau schaltet der MOSFET?
...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.
Hast Du versucht den Code 1:1 zu übernehmen? Ich kenne zwar Deine beiden Kumpels nicht, aber Atmel ist nicht gleich Atmel.
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"
Stack Pointer falsch initialisiert? Nachtrag: Programmierkabel nicht abgezogen?
:
Bearbeitet durch User
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.