Forum: Mikrocontroller und Digitale Elektronik Seltsames Verhalten bei Attiny85 und Mosfetschaltung, nicht bei Atmega168PA


von Carsten (Gast)


Angehängte Dateien:

Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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?

von Carsten (Gast)


Lesenswert?

Auch das Netzteil ist das gleiche.

von c-hater (Gast)


Lesenswert?

Carsten schrieb:

> Auch das Netzteil ist das gleiche.

OK, und was für eins genau?
Und was genau schaltet der MOSFET?

von Carsten (Gast)


Lesenswert?

...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.

von Jack V. (jackv)


Lesenswert?

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.

von Sebastian S. (amateur)


Lesenswert?

Hast Du versucht den Code 1:1 zu übernehmen?
Ich kenne zwar Deine beiden Kumpels nicht, aber Atmel ist nicht gleich 
Atmel.

von F. F. (foldi)


Lesenswert?

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.

von Carsten (Gast)


Lesenswert?

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?

von Peter D. (peda)


Lesenswert?

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"

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

Stack Pointer falsch initialisiert?

Nachtrag: Programmierkabel nicht abgezogen?

: Bearbeitet durch User
von Bernd (Gast)


Lesenswert?

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.

von Carsten (Gast)


Lesenswert?

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?

von Stefan F. (Gast)


Lesenswert?

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).

von c-hater (Gast)


Lesenswert?

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!

von F. F. (foldi)


Lesenswert?

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
Noch kein Account? Hier anmelden.