Forum: Mikrocontroller und Digitale Elektronik ATmega8 funktioniert nicht richtig


von Denny (Gast)


Angehängte Dateien:

Lesenswert?

Hallo
Ich habe mir eine Schaltung mit dem ATmega8 aufgebaut.
(a.png und c.jpg)
Könnt ihr mir bestätigen, dass die Schaltung richtig ist?

Das Bild b.jpg zeigt meinen Aufbau. (Hat aber nichts mit dem ATmega8 zu 
tun.)
Der ATmega8 funktioniert nur manchmal. Und dann nur ein paar Sekunden.
Das Programm funktioniert.

Ich vermute mal, dass ein Kondensator nicht stimmt.

von Otto (Gast)


Lesenswert?

Wenn Du L1 an der stabilisierten Versorgung zuschaltest, wird diese 
einbrechen. Die Lastversorgung sollte aus der unstabilisierten 
Versorgungsspannung betrieben werden. 1µF am Reset-Pin ist sehr viel.

Otto

von Denny (Gast)


Lesenswert?

Otto schrieb:
> Wenn Du L1 an der stabilisierten Versorgung zuschaltest, wird diese
> einbrechen. Die Lastversorgung sollte aus der unstabilisierten
> Versorgungsspannung betrieben werden.

Oh das ist natürlich richtig!
Ich habe mich da beim Zeichnen vertan.
In Wirklichkeit ist die Spule an der Versorgungsspannung angeschlossen 
(10V).

Otto schrieb:
> 1µF am Reset-Pin ist sehr viel.
Was könnte das für Auswirkungen haben?? (Ich denke der Einschaltvorgang 
ist einfach länger)

Fällt euch noch etwas auf??

Danke!

von Otto (Gast)


Lesenswert?

Richtig - der Reset dauert länger.

Es fehlt noch ein Elko am Reglereingang (ca. 1000µF/A) und einer am 
Reglerausgang (10-22µF).

Ich würde den Elko der Elektronikversorgung mit einer Diode entkoppeln, 
so dass die Last diesen Elko nicht entladen kann.

von Michael B. (mb_)


Lesenswert?

Denny schrieb:
> Das Programm funktioniert.

Woher weisst du das?

von Otto (Gast)


Lesenswert?

Auch würde ich mit 100nF-Kondensatoren direkt an den Versorgungspins des 
AVR nicht geizen.

von guest (Gast)


Lesenswert?

Naja, einer reicht schon im Normalfall. Aber der sollte wirklich nicht 
mehr als ein paar mm vom AVR entfernt montiert werden. Es sieht aus als 
wären es eher ein paar cm.

von Denny (Gast)


Lesenswert?

Michael Buesch schrieb:
> Woher weisst du das?

Der Magnet schwebt perfekt, wenn ich die Schaltung mit dem MyAVR MK2 
aufbaue.

guest schrieb:
> Aber der sollte wirklich nicht
> mehr als ein paar mm vom AVR entfernt montiert werden. Es sieht aus als
> wären es eher ein paar cm.

Das habe ich schon öfters gelesen, dass der nicht weit entfernt sein 
sollte.
Allerdings verstehe ich nicht wieso...
Kannst du mir das bitte erklären??

von Denny (Gast)


Lesenswert?

Das Komische an der ganzen Geschichte ist, dass die Schaltung am Anfang 
(also vor ein paar Wochen) noch funktionierte.
Sie hatte nur selten einen Ausfall (Ungefähr nach 5 Minuten oder so 
spielte alles verrückt.)

von Hc Z. (mizch)


Lesenswert?

Aref mit Vcc zu verbinden ist im besten Fall sinnlos.  Wird die interne 
Referenz für den ADC verwendet, ist es ein Fehler.  Es gehört 
normalerweise mit einem C (gegen AGND) verbunden und sonst mit nichts.

von Ronny (Gast)


Lesenswert?

>guest schrieb:
>> Aber der sollte wirklich nicht
>> mehr als ein paar mm vom AVR entfernt montiert werden. Es sieht aus als
>> wären es eher ein paar cm.
>
> Das habe ich schon öfters gelesen, dass der nicht weit entfernt sein
> sollte.
> Allerdings verstehe ich nicht wieso...
> Kannst du mir das bitte erklären??

Das wurde schon dutzende Male durchgekaut hier, z.b.

Beitrag "100nF-Blockkondensator"
Beitrag "100nF zwschn Vcc, GND"

von Denny (Gast)


Lesenswert?

Sorry für 3 Posts hintereinander...

Also ich habe den Quarz gewechselt:
Mit 3.6864MHZ funktioniert es nicht sehr gut.
Mit 6MHZ funktioniert es ohne Aussetzer. Allerdings ruckelt der Magnet 
beim Schweben ein wenig.

Woran kann das liegen!?

von Dieter M. (Gast)


Lesenswert?

Bist Du sicher, dass Du eine 5V LED benutzt?
Falls es doch eine Normale ohne Vorwiderstand sein sollte, wird der Port 
des Atmel überlastet. Das kann auch zu merkwürdigen Effeten führen.

von Denny (Gast)


Lesenswert?

Dieter M. schrieb:
> Bist Du sicher, dass Du eine 5V LED benutzt?
> Falls es doch eine Normale ohne Vorwiderstand sein sollte, wird der Port
> des Atmel überlastet. Das kann auch zu merkwürdigen Effeten führen.

1. Die LED ist nicht angeschlossen. (Ist nur für später vorgesehen.)
2. Es ist eine LED mit integriertem Vorwiderstand 
(http://www.conrad.de/goto.php?artikel=182404)

Also ich habe noch ein bissche getestet.
Manchmal schwebt der Magnet 2 Sekunden dann knallt er entweder nach oben 
oder nach unten.
Und das bleibt dann so bis ich die Versorgung wegnehme.
Wenn ich die Spannung dann an PB1 messe ist sie 5V bzw 0V.
(Wie gesagt an der Software liegt es nicht.)

von Rolf Magnus (Gast)


Lesenswert?

> Mit 3.6864MHZ funktioniert es nicht sehr gut.
> Mit 6MHZ funktioniert es ohne Aussetzer. Allerdings ruckelt der Magnet
> beim Schweben ein wenig.
>
> Woran kann das liegen!?

Oszillator-Fuses falsch eingestellt?

von Denny (Gast)


Lesenswert?

Wie kann ich die einstellen??
Mit AVR-QuickProg habe ich ein Fuse-Bit aktiviert: Externen Quarz

von Denny (Gast)


Lesenswert?

Auf dem MyAVR funktioniert der ATmega8 ja mit 16MHz wunderbar.
Das kann es also auch eigentlich nicht sein.

von Denny (Gast)


Lesenswert?

Hier ist mal ein kleines Video:
http://www.youtube.com/watch?v=YZHyDGO1XkI

Ich verstehe das nicht. Auf dem MyAVR funktioniert alles normal.
Bitte helft mir...

von Michael B. (mb_)


Lesenswert?

Denny schrieb:
> Hier ist mal ein kleines Video:
> http://www.youtube.com/watch?v=YZHyDGO1XkI
>
> Ich verstehe das nicht. Auf dem MyAVR funktioniert alles normal.
> Bitte helft mir...

Das sieht fuer mich trotzdem nach Softwarefehler aus. Oder nach einem 
kompletten Zusammenbruch der Versorgunsspannung (oder Brownout, wenn 
brownout detection an it) und der uc macht dann einen Reset.

von Otto (Gast)


Lesenswert?

Welche von den gegebenen Ratschlägen - ausser des m. E. sinnlosen 
Quarztausches - hast Du bereits durchgeführt ?

Wie hoch ist die Stromaufnahme der Gesamtschaltung und welchen 
Maximalstrom liefert Deine Stronversorgung ?

von Jötze (Gast)


Lesenswert?

Die Art und Weise, wie Du den Hallsensor angeschlossen hast, schreit 
danach korrigiert zu werden.

Im Datenblatt des HAL815 steht alles groß und breit drin:

4. Application Notes
4.1. Application Circuit
For EMC protection, it is recommended to connect one
ceramic 4.7 nF capacitor each between ground and
the supply voltage, respectively the output voltage pin.
In addition, the input of the controller unit should be
pulled-down with a 4.7 kOhm resistor and a ceramic
4.7 nF capacitor.

Jetzt sieh' Dir noch das Bild 4-1 an, mach' das so und dann melde Dich 
wieder mit dem Ergebnis.

Auch wenn es schon gesagt wurde: 100nF an Vcc des AVR!


Grüße,
Jötze

von Denny (Gast)


Angehängte Dateien:

Lesenswert?

Also ich habe einen Kondensator von 1µF an direkt an Pin 7 und Pin 8 des 
ATmega8 gehängt (Vcc und GND).
Bringt aber nichts.
Ich habe momentan keinen 100nF Kondensator zur Hand.

Die Beschaltung des HAL815 hat bis jetzt immer super funktioniert.
Ich werde es später aber mit der anderen Schaltung versuchen.

Mein Netzteil liefert maximal 1.5A.
Die Spule zieht - bei 10V - knapp über 2A.

Aber die ist normalerweise nie unter Volllast und auf dem MyAVR 
funktionierte es auch immer.
Ich werde mir nächste Woche ein stärkeres Netzteil ausborgen...

von Jötze (Gast)


Lesenswert?

Da wir über die Art und Weise der Verlegung des GND-Signals nichts 
wissen, könnte die Beschaltung des Sensors entscheidend sein.
Sie sorgt für Unempfindlichkeit gegenüber positiven und negativen Spikes 
auf Vcc und GND.
Vergiss nicht: Du schaltest eine Induktivität ...

Bei einer sternförmigen Masseführung (GND vom Spannungsregler, vom 
Low-Side-Schalter der Induktivität und von allem, was am uC hängt 
treffen sich an einem Punkt - da wird dann auch das Netzteil 
angeschlossen) wäre das nicht so empfindlich.
Aber das ist bei Dir sicher nicht so ausgeführt.

von Hc Z. (mizch)


Lesenswert?

Ist eigentlich Aref immer noch gegen Vcc kurzgeschlossen?

von Jötze (Gast)


Lesenswert?

Denny schrieb:
> und auf dem MyAVR
> funktionierte es auch immer.

Hast Du Dir mal die Beschaltung von AREF, AVCC und AGND des myAVR 
angeschaut?
Hier ist der Schaltplan:
http://www.myavr.info/download/produkte/myavr_board_mk2/techb_schaltplan-myavr-board-mk2-usb.png

Jetzt vergleiche mal dazu Deinen Schaltplan und nehme zur Kenntnis, dass 
das analoge Signal vom HAL815 die einzige Eingangsgröße ist.
Was passiert wohl, wenn die nicht zuverlässig ist?

von Michael B. (mb_)


Lesenswert?

Denny schrieb:
> Mein Netzteil liefert maximal 1.5A.
> Die Spule zieht - bei 10V - knapp über 2A.
> Aber die ist normalerweise nie unter Volllast

Und unnormalerweise? Schonmal mit Messen versucht?

von Denny (Gast)


Lesenswert?

Jötze schrieb:
> Bei einer sternförmigen Masseführung (GND vom Spannungsregler, vom
> Low-Side-Schalter der Induktivität und von allem, was am uC hängt
> treffen sich an einem Punkt - da wird dann auch das Netzteil
> angeschlossen) wäre das nicht so empfindlich.
> Aber das ist bei Dir sicher nicht so ausgeführt.
Ich verstehe nicht ganz...
Bei mir gibt es nur eine Masse.
An das Potential ist alles angeschlossen, was an die Masse gehört.

Hc Zimmerer schrieb:
> Ist eigentlich Aref immer noch gegen Vcc kurzgeschlossen?
Ja.
AREF muss doch an 5V, weil das die Referenzspannung für die AD-Wandlung 
ist!?

Jötze schrieb:
> Hast Du Dir mal die Beschaltung von AREF, AVCC und AGND des myAVR
> angeschaut?
> Hier ist der Schaltplan:
> http://www.myavr.info/download/produkte/myavr_boar...
>
> Jetzt vergleiche mal dazu Deinen Schaltplan und nehme zur Kenntnis, dass
> das analoge Signal vom HAL815 die einzige Eingangsgröße ist.
> Was passiert wohl, wenn die nicht zuverlässig ist?
Ja bei diesen Anschlüssen liegt wahrscheinlich irgendwo das Problem.

Manchmal funktioniert es für eine Sekunde.
Ich werde mir ein paar 100nF Kondensatoren beschaffen und sie da 
einbauen, wo es nötig ist.
Werde ich ja dann so machen müssen. :-(

von Otto (Gast)


Lesenswert?

> AREF muss doch an 5V, weil das die Referenzspannung
> für die AD-Wandlung ist!?

jain - AREF wird Controllerintern umgeschaltet und bekommt i. A. bur 
einen 100nF gegen GND.

von Hc Z. (mizch)


Lesenswert?

Wenn 5 V als Referenz verwendet wird, geschieht das üblicherweise 
Controller-intern, indem ADMUX passend gesetzt wird.  Eine externe 
Verbindung ist dazu nicht nötig.

Sollte das in Deinem Programm hier über die externe Verbindung von Aref 
mit Vcc laufen, wäre das etwas - ahem - unüblich.

von Uwe (Gast)


Lesenswert?

Hi!
> Mit 3.6864MHZ funktioniert es nicht sehr gut.
> Mit 6MHZ funktioniert es ohne Aussetzer. Allerdings ruckelt der Magnet
> beim Schweben ein wenig.
>
> Woran kann das liegen!?

>Auf dem MyAVR funktioniert der ATmega8 ja mit 16MHz wunderbar.
>Das kann es also auch eigentlich nicht sein.

16MHz/6MHz=2,66..
Kann es sein das dein Proz. einfach nicht hinterherkommt weil der Takt 
zu klein ist?

> Mein Netzteil liefert maximal 1.5A.
> Die Spule zieht - bei 10V - knapp über 2A.
> Aber die ist normalerweise nie unter Volllast

Ist auch nicht unbedingt gesund.
10V/2A=5 Ohm*1.5A=7,5V, Das könnte für den 7805 etwas knapp werden, muss 
aber nicht.
Ich denke eher dein Takt ist zu klein.

Viel Erfolg, Uwe

von Denny (Gast)


Lesenswert?

OK ich habe die Reference-Eigenschaft jetzt auf Vcc umgeschaltet.
Ich werde AVCC dann mit einem Kondensator auf GND setzen.
Dann werde ich es nochmal testen.

Hier meine Bascom-Regelung:
1
'#>Informationen
2
 'Projektname: Schwebender Magnet
3
 'Datum: 2009-2010
4
 'Copyright und Hersteller: Weinderg Denny
5
 'Beschreibung: Dies ist der Source-Code zur Endarbeit "Schwebender Magnet".
6
'#<Informationen
7
8
$regfile = "m8def.dat"                                      'ATmega8
9
$crystal = 16000000                                         'Quarzfrequenz (Extern)
10
11
'#>Variablen
12
Dim Position As Integer                                     'Analoge Spannung des Hallsensors
13
Dim Pulsweite As Integer                                    'Die Pulsweite für den Spulenstrom
14
Dim Alteposition As Integer
15
Dim Positionsveraenderung As Integer                        'Die Veränderung der Spannung des Hallsensors während eines Zyklus
16
Dim Daempfung As Integer                                    'Die Dämpfung des Magneten, D
17
Daempfung = 150
18
Dim Offset As Integer
19
Offset = -50                                                'Damit man die Position des Magneten verstellen kann, P
20
'#<Variablen
21
22
'#>Konfiguration
23
Config Adc = Single , Prescaler = Auto , Reference = Avcc   'Analog-Digital-Wandler
24
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down       'Pulsweitenmodulation
25
'#<Konfiguration
26
27
'#>Hauptprogramm
28
S_start:
29
Do
30
Start Adc
31
Position = Getadc(0)                                        'Analoge Spannung des Hallsensors messen
32
Stop Adc
33
                                                             'Weil der Sensor die halbe Spannung in einer Richtung angibt
34
Position = Position - 512
35
36
Pulsweite = Position / 2                                    'Word-->Byte = /4 und Hallsensor = halbe Spannung = *2 => /2
37
38
If Position > Alteposition Then
39
Positionsveraenderung = Position - Alteposition             'Positionsveränderung berechnen
40
Positionsveraenderung = Positionsveraenderung * Daempfung   'Dämpfung hinzurechnen
41
42
Pulsweite = Pulsweite + Positionsveraenderung               'Pulsweite berechnen
43
Else
44
Positionsveraenderung = Alteposition - Position             'Positionsveränderung berechnen
45
Positionsveraenderung = Positionsveraenderung * Daempfung   'Dämpfung hinzurechnen
46
47
Pulsweite = Pulsweite - Positionsveraenderung               'Pulsweite berechnen
48
End If
49
Pulsweite = Pulsweite + Offset                              'Offset hinzurechnen
50
51
If Pulsweite > 255 Then Pulsweite = 255                     'Begrenzungen der Pulsweite einhalten
52
If Pulsweite < 0 Then Pulsweite = 0                         'Begrenzungen der Pulsweite einhalten
53
54
If Position < 0 Then                                        'Wenn der Magnet falsch rum hängt wird er Umgedreht
55
Compare1a = 255
56
Goto S_start
57
End If
58
59
Compare1a = Pulsweite                                       'Spulenstrom regeln
60
61
Alteposition = Position                                     'Alteposition setzen
62
Loop
63
'#>Hauptprogramm

Es handelt sich um eine gekürzte Version. Normalerweise kommt da noch 
die serielle Schnittstelle hinzu.

von Karl H. (kbuchegg)


Lesenswert?

Du wirst das zwar sicherlich ausprobiert haben
1
Daempfung = 150
2
3
Positionsveraenderung = Position - Alteposition             'Positionsveränderung berechnen
4
Positionsveraenderung = Positionsveraenderung * Daempfung   'Dämpfung hinzurechnen
5
Pulsweite = Pulsweite - Positionsveraenderung

150?
Das kommt mir ehrlich gesagt aus dem Bauch heruas verdammt viel vor, bei 
einer 8-Bit PWM. Wenn man davon ausgeht, dass der ADC bei ansonsten 
konstanter(!) Eingangsspannung ständig um 1 bis 2 Werte um den richtigen 
Wert pendelt, so wirken sich alleine diese Variationen schon extrem auf 
die PWM aus.

von Denny (Gast)


Lesenswert?

Es funktioniert auch mit 50.
Aber dann fängt der Magnet an zu schwingen.
Wie gesagt das Programm funktioniert.

von Denny (Gast)


Angehängte Dateien:

Lesenswert?

Hallo
Es funktioniert wieder alles!
Die Beschaltung von AVcc und AREF wurde geändert.
Außerdem funktioniert es nicht mit dem 16MHz Quarz.
Warum auch immer!?

Danke für die Hilfe!
Gruß Denny.

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.