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.
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
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!
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.
Denny schrieb:
> Das Programm funktioniert.
Woher weisst du das?
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.
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??
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.)
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.
>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"
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!?
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.
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.)
> 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?
Auf dem MyAVR funktioniert der ATmega8 ja mit 16MHz wunderbar. Das kann es also auch eigentlich nicht sein.
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...
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.
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 ?
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
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...
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.
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?
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?
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. :-(
> 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.
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.
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
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.
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.
Es funktioniert auch mit 50. Aber dann fängt der Magnet an zu schwingen. Wie gesagt das Programm funktioniert.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.