Hallo, Es geht um einen Attiny 13, welchen ich mittels Usbasp programmiere. D.h. ich hab einen Programmiersockel und einen Sockel in der Schaltung, also beides getrennt. Ich steuere die helligkeit einer Glühlampe mit einer simpelsten Software PWM. Das funktioniert auch so weit ganz gut, nur das die Werte am Spannungsteiler nicht mit den ADC werten übereinstimmen. 0V ---- R1-22k----- ADC1 -------R2-22k-------- 5V am ADC liegen messbar fast 0V. Wenn ich den µC jetzt aus dem Sockel(von der Schaltung) nehme messe ich zwischen ADC1 und 0V bzw. VCC 22k. Also so stimmt alles. Ich hab den Eindruck, das der ADC an sich einen sehr niedrigen Widerstand nach Gnd hat. Das ganze soll für ein lineares 10k Poti Sein. Hab es durch die Widerstände ersetzt um ein 50%/50% verhältnis zu simulieren. vt Was ist mein Problem ? mfG Rob
Hallo, deine Zeichnung hat aber nichts mit dem geschildertem Problem zu tun - oder? Gruß otto
Also die Zeichnung ist nur, falls jemand fragt, was neben dem Spannungsteiler noch am µC hängt. Am Pin 7 (ADC1 hängt der Spannungsteiler). Und ab einem gewissen Widerstandsverhältnis, also kurz vorm Ende des POTI-Stellbereichs kann ich dann die Spannug, am ADC1 bis auf 5V hochstellen. Das Poti ist Linear, hab es durchgemessen und auch schon ein anderes probiert. Und um alles auszuschließen hab ich nun den 22k/22k Spannungsteiler montiert. Hier der vorläufige Code: .include "tn13def.inc" .org 0x000 rjmp START .org TIM0_OVF0addr rjmp TIMER1 START: ldi r16, 0b10 out TCCR0A, r16 ldi r16, (1<<TOIE0) out TIMSK0, r16 ldi r16, 0b01000001 out ADMUX, r16 ldi r16, 0b10000010 out ADCSRA, r16 ldi r16,0b11111011 out DDRB,r16 sei ldi r22,0xff LOOP: OUT PORTB,r19 ldi r16,1 ldi r20,0 ldi r21,0 MITTEL: sbi ADCSRA, ADSC WAITADC: sbic ADCSRA, ADSC rjmp WAITADC in r16,ADCL in r17,ADCH ror r16 ror r16 andi r16,0b00111111 rol r17 rol r17 rol r17 rol r17 rol r17 rol r17 andi r17,0b11000000 or r17,r16 ldi r19,0xFF dec r23 cp r23,r17 brlo LOOP ldi r19,0x00 rjmp LOOP TIMER1: reti
Du kannst keine PWM mit einem ADC messen. Und ja, bei einem PWM Ausgang liegen immer nur 0V oder 5V an. (falls dein µC mit 5V läuft) Ohne Ausnahme!
Ulrich F. schrieb: > Du kannst keine PWM mit einem ADC messen. > > Und ja, bei einem PWM Ausgang liegen immer nur 0V oder 5V an. > (falls dein µC mit 5V läuft) > Ohne Ausnahme! Ich verstehe das so, dass über das Poti der Sollwert vorgegeben werden soll.....
genau so meine ich das. Ich habe ein Poti als Spannungsteiler an einem ADC und dieser macht mir daraus ein PWM. Das ganze funktioniert bestens, nur das der Einstellbereich des POTIS auf den erstenn 4% liegen. Nein es ist kein logarithmisches Poti, deswegen habe ich einen 22k/22k Spannugsteiler dazwischen gelötet. Vielleicht hat der µC einen weg. Ich dachte ich hab was übersehen beim Programmieren.
Rob O. schrieb: > in r16,ADCL > in r17,ADCH > ror r16 > ror r16 > andi r16,0b00111111 > rol r17 > rol r17 > rol r17 > rol r17 > rol r17 > rol r17 > andi r17,0b11000000 > or r17,r16 Das kannst du dir sparen, wenn du den ADC auf linksbündig setzt und dann nur ADCH auswertest. Da kommt ohne weitere Rollerei ein 8-bit Wert raus. Rob O. schrieb: > ldi r16, 0b01000001 > out ADMUX, r16 Du bist sicher, das du die internen 1,1V als Referenz haben willst? Wenn also am ADC1 1,1V oder mehr liegen, hängt der ADC immer auf 1023. Rob O. schrieb: > ldi r16, 0b10 > out TCCR0A, r16 Da fehlt was. 0b10 ist noch kein vollständiges Byte und kann zu lustigen Sachen führen, die du aber nicht vorhattest.
:
Bearbeitet durch User
Was passiert, wenn Sie
> ldi r19,0xFF
durch
ldi r19,0b11111011
ersetzen?
Also, von Matthias Sch. das
1 | ldi r16, 1 |
2 | out ADMUX, r16 |
zusammen mit dem
1 | ldi r19,0b11111011 |
funktioniert hier auf einem ATtiny85.
Messung zwischen 0V-Gnd und dem Mittelpunkt des Spannungsteilers bei folgendem, und nach euren Vorschlägen, abgeänderten codes: Messung: ca. 0.1V
1 | .include "tn13def.inc" |
2 | .org 0x000 |
3 | rjmp START |
4 | .org TIM0_OVF0addr |
5 | rjmp TIMER1 |
6 | |
7 | |
8 | START: |
9 | |
10 | ; ldi r16, 0b10 |
11 | ; out TCCR0A, r16 |
12 | ; |
13 | ; ldi r16, (1<<TOIE0) |
14 | ; out TIMSK0, r16 |
15 | |
16 | |
17 | ldi r16, 0b00100001 |
18 | out ADMUX, r16 |
19 | ldi r16, 0b10000010 |
20 | out ADCSRA, r16 |
21 | |
22 | ldi r16,0b11111011 |
23 | out DDRB,r16 |
24 | sei |
25 | ldi r22,0xff |
26 | |
27 | LOOP: |
28 | OUT PORTB,r19 |
29 | |
30 | |
31 | |
32 | ldi r16,1 |
33 | ldi r20,0 |
34 | ldi r21,0 |
35 | MITTEL: |
36 | sbi ADCSRA, ADSC |
37 | WAITADC: |
38 | sbic ADCSRA, ADSC |
39 | rjmp WAITADC |
40 | in r16,ADCL |
41 | in r17,ADCH |
42 | |
43 | |
44 | ldi r19,0x0b11111011 |
45 | dec r23 |
46 | cp r23,r17 |
47 | |
48 | brlo LOOP |
49 | |
50 | ldi r19,0x00 |
51 | rjmp LOOP; |
52 | |
53 | |
54 | TIMER1: |
55 | |
56 | reti |
********************************************************************* Messung bei folgendem Code: Messung 2,49V !!!
1 | .include "tn13def.inc" |
2 | LOOP: |
3 | rjmp LOOP |
ich krieg noch ne Kriese Wegen dem Problem habe ich heute nix geschafft.
:
Bearbeitet durch User
Welchen Assembler benutzen Sie, mein avrasm2 nimmt das nicht:
> ldi r19,0x0b11111011
Funktioniert doch wunderbar, es liegt nur an dieser dussligen Zeile.
Oh, das habe ich übersehen. Ich nutze WAVRAMS. Doch nach Neucompilierung und Programmierung des µC, bleibt das Problem bestehen.
Die Programmierleitungen haben Sie zur Messung abgezogen? Also bei mir klappt es, wie gesagt, mit einem ATtiny85 (m.m.), an B4 hängt ein altes Zeigervoltmeter, und mit dem Potenziometer kann ich schön den Zeiger wandern lassen.
Rob O. schrieb: > Doch nach Neucompilierung > und Programmierung des µC, bleibt das Problem bestehen. Wundert mich nicht wirklich. Du setzt auch immer den ganzen Port, während es viel einfacher geht. Also entweder mit
1 | sbi PORTB,4 ; setzen von PB4 |
2 | ; und |
3 | cbi PORTB,4 ; löschen von PB4 |
; oder gleich die Hardware PWM des Tiny benutzen. Den OVF Interrupt des Timers kannst du dann zum laden des OCR Registers aus r17 benutzen.
:
Bearbeitet durch User
> Wundert mich nicht wirklich. Du setzt auch immer den ganzen Port Deswegen spart er jetzt ja mit > ldi r19,0b11111011 B2, also ADC1, aus.
Wenn ich die zeile: OUT PORTB,r19 weglasse messe auch 0v. wenn ich OUT DDRB,0b11111011 weglasse, messe ich 2,5!!!! Volt Ich habe auch das OUT DDRB,0b11111011 über die ADMUX und ADSCRA zugriffe gesetzt. 0V es müsste doch daran liegen
S. Landolt schrieb: >> Wundert mich nicht wirklich. Du setzt auch immer den ganzen Port > Deswegen spart er jetzt ja mit >> ldi r19,0b11111011 > B2, also ADC1, aus. Trotzdem ist das ja keine brauchbare Praxis. Wenn ich ein Pin setzen will, schiesse ich doch nicht auf den ganzen Port :-P Da steht auch noch eine Menge Müll im Programm. Wo wird dein SoftPWM Zähler (r23) initialisiert? Was tun denn r20-r22? Schmeiss den Kram erstmal raus und überdenke nochmal die Option mit der Hardware PWM.
Alles vollkommen richtig, trotzdem sollte es in der jetzigen Form laufen, da stimmt wohl noch etwas anderes nicht, und bevor man neue Baustellen aufmacht... Da ich aber nur den ATtiny85 zum Ausprobieren hier habe, verabschiede ich mich an dieser Stelle.
Das Programm war ursprünglich größer und ich habe alles Wegkastriert, bis zum Kernproblem: ldi r16,0b00010000 out DDRB,r16 ist die Lösung. 1000Dank obwohl ich den Hintergrund nicht verstehe.
Da der ganze PWM Kram eigendlich mal für einen Wischermotor gedacht ist gibt es jetzt neue Probleme. Ich habe eine Schottkydiode als Freilaufdiode antiparallel gelötet. Bei der Glühlampe alles allright nur wenn ich dem Motor zuschalte, dann geht die PWM auf 100%. Wenn ich nun am PIN-out des Tiny13 messe, messe ich immer Lowlevel. Ich denke der µC Resetet sich ständig und der Mosfet bleibt im Dauerleitzustand. Wie kann ich der Annahme nachgehen oder den µC vom Resetten hindern ?
Wie sieht die Schutzbeschaltung der Stromversorgung und des Tiny aus?
Rob O. schrieb: > Ich habe eine Schottkydiode als Freilaufdiode antiparallel gelötet. Welche? Und wieviel Strom fließt durch deinen Scheibenwischermotor, wenn er läuft? > Wie kann ich der Annahme nachgehen ... Du kannst den µC in der Initialisierungsphase, die in der Hauptschleife nicht durchlaufen wird, irgendeine Kennung (Pin-Wackeln, serielle Ausgabe) von sich geben lassen und dir angucken, ob diese Kennung auch während des Betriebs auftaucht.
Ich vermute ein anderes Problem! Wenn er das Poti mit dem ADC einliest bekommt er 10 Bit also 1024 Werte. Macht er mit 8Bit weiter, bekommt er beim Drehen von 0 bis max 4x 0-max am PWM-Ausgang! Prüf mal das nach!
Also erstmal. PWM funktioniert mit einer Sofitte von 0 auf 100 % Problemlos. Vor meiner LOOP-Routine habe ich ein paar langsame Impulse eingesetzt. So sehe ich immer wenn der µC resettet. Wenn ich nun den Scheibenwischermotor, parallel zur Sofitte lege. Brennt sie 100% hell. Nun habe ich das OSZI zwischen Gnd und µC-Ausgangspin geklemmt. Es ist kein PWM-Signal oder Startimpulse wahrzunehmen. Für mich heißt das, dass er ultraschnell resettet. -Scheibenwischermotor ist der typische 80er,90er Jahre-VW-Typ. Billigmultimeter zeigt 9.8A unter Last ! -Stromversorgung PC-Netzteil: Ich hab den Resetpin (PIN1) auf VCC gelegt. Schutzbeschaltung muss ich erledigen.
Nachtrag: Die SChottky Diode habe ich mal als Freilaufdiode gekauft und habe leider deren Daten nicht parat. Sie ist so grau und kugeligund hat auf jedenfall "Dicke beine" ich denke min 1A. Zusätzlich habe ich noch eine BY214-400 zwischen die Anschlussdrähte am Motor gelötet. Soll ein simpler Vorschubantrieb werdnen. Die Spindel war ein wenig verklemmt, so das die Last deutlich zu hoch war. Somit sinken die Amperewerte noch mal ein bisschen. Wenn ich die PWM müt Glühlampe betreibe (wo sie ja anstandslos funktioniert) und den Motor parallel zur Versorgungsspannug 12V (also nicht zur Glühlampe) hänge. Läuft er ohne das der µC resettet. Genau das passiert auch wenn ich ihn an die 5V VCC Leitung der Versorgungsspannung hänge. An selbiger hängt auch der µC-PIN8 (VCC). Mit einem kleinerem Getriebemotor funktioniert das alles gut. Doch diesen hatte ich vorher drin und ihn mittels Drahtpoti gesteuert. Viel zu langsam und zu schwach, deshalb jetzt der Umbau auf Wischermotor. Ich danke euch schon mal für eure Hilfe. Man lernt sehr viel dazu.
1 | 12v |
2 | ----------------------------------o--------o----------. |
3 | | | | |
4 | o---. | | | |
5 | | 5v | | .-. |
6 | o | | | ( X ) |
7 | |0v | .-. | '-' |
8 | | | 4.7k | | | | |
9 | | | | | | | |
10 | | | '-' | | |
11 | | | | |/ | |
12 | | | o------| tip120 o---' |
13 | | | | |> | | |
14 | | | .--------. | | ||-+ V |
15 | | | | | | | ___ ||<- - |
16 | | '-o | |/ '-|___|-||-+ | |
17 | | | o----------------| bc338 10 | | |
18 | | | | |> | | |
19 | | |AtTiny13| |-------------------o---' |
20 | | | | | |
21 | | | | | |
22 | | | | | |
23 | | '--------' | |
24 | | | |
25 | | ---- |
26 | ---- |
27 | (created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de) |
:
Bearbeitet durch User
Rob O. schrieb:
1 | > 12v |
2 | > ----------------------------------o--------o----------. |
3 | > | | | |
4 | > o---. | | | |
5 | > | 5v | | .-. |
6 | > o | | | ( X ) |
7 | > |0v | .-. | '-' |
8 | > | | 4.7k | | | | |
9 | > | | | | | | |
10 | > | | '-' | | |
11 | > | | | |/ | |
12 | > | | o------| tip120 o---' |
13 | > | | | |> | | |
14 | > | | .--------. | | ||-+ V |
15 | > | | | | | | ___ ||<- - |
16 | > | '-o | |/ '-|___|-||-+ | |
17 | > | | o----------------| bc338 10 | | |
18 | > | | | |> | | |
19 | > | |AtTiny13| |-------------------o---' |
20 | > | | | | |
21 | > | | | | |
22 | > | | | | |
23 | > | '--------' | |
24 | > | | |
25 | > | ---- |
26 | > ---- |
Da sind noch grobe Fehler: - Basiswiderstand am BC338 fehlt - Widerstand zwischen Emitter des TIP120 und GND fehlt - Diode parallel zum FET ist falsch gepolt und unnötig - wenn X ein Motor ist, fehlt die Freilaufdiode parallel zu X - GND am ATtiny ist wohl nur vergessen... Gruß Dietrich
Hier siehst du wie ein FET-Treiber aufgebaut sein soll. https://www.mikrocontroller.net/articles/Treiber
Tschuldigung die Schaltung oben ist totaler mist. Unten sollte die Richtige sein. Motor und Lampe sind parallel geschaltet. Wenn ich PB4 abklemme, Läuft der Motor auf 100%. Und ich kann mit dem Oszi das PWM-Signal (PB4 am µC) wunderbar erkennen. Kaum verbinde ich PB4 mit dem 2,7kOhm Widerstand, resettet der µC sofort. Als ich zum Motor seriell einen Hochlastwiderstand (Kochsalzlösung) geklemmt habe funktionierte die PWM. Jetzt bleibt der Versuch mit dem Optokoppler.
1 | 12v |
2 | o-----------------------------------o--------o----------o----. |
3 | | | | | |
4 | o-----. | |Motor+Lamp| | |
5 | | 5v | | .-. | |
6 | o | | | ( X ) - |
7 | |0v | .-. | '-' ^ BY214-400 |
8 | | | 4.7k | | | | | |
9 | | | | | | | | |
10 | | | AtTiny13 '-' | | | |
11 | | | .---------. | |/ o----' |
12 | | | | | o------| tip120 | |
13 | | o---o---oVCC | 2,7k | |> | |
14 | | | '---oReset | ___ |/ | ||-+ |
15 | | .-. | PB4o---|___|-| | ___ ||<- IRF2807 |
16 | | | |<-----oADC1 | |> o-|___|-||-+ |
17 | | | | | | bc337 | | 10 . |
18 | | '-' | | | | | |
19 | | | | GNDo-. | | | |
20 | | | '---------' | | .-. 4.7k | |
21 | | | | | | | | |
22 | | | | | | | | |
23 | | | | | '-' | |
24 | | | | | | | |
25 | | | | | | | |
26 | | | | | | | |
27 | | | | | | | |
28 | | | | | | | |
29 | '-----o-------------------o-------- o--------o----------' |
30 | (created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de) |
:
Bearbeitet durch User
Hast du sie nur nicht eingezeichnet oder gibt es tatsächlich keine Abblockkondensatoren am Tiny? Dann wird es Zeit, zwischen Vcc und GND direkt am MC z.B. mal 100nF einzubauen. Am ADC1 Eingang kann ein 10nF gegen Masse auch nicht schaden. Der wichtige Schaltungsteil, aus dem die 12V und die 5V kommen, fehlt leider auch. So ein Motor hat nämlich einen hohen Einschaltstrom und lässt dadurch die Belastung der 12V hochschnellen. Wenn dabei die 5V auf z.B. 2V zusammenbrechen, resettet der Tiny, auch wenns ein 13A ist. Die Wahl der PWM Frequenz ist dabei auch wichtig. Wenn sie zu hoch ist, kommt die Endstufe nicht hinterher, und wenn sie zu niedrig ist, knurrt oder piepst der Motor.
die 12V bzw 5V kommen aus einem PC-Netzteil. Da ich keine Kondensatoren da habe. Habe ich den µC an ein anderes Netzteil geklemmt und ihn mittels 4n35 an den "Treiber" gekoppelt. Das ganze funktioniert nur muss ich jetzt die PWM geräuschloser machen, obwohl der Motor gummigelagert ist, Vibriert der ganze Tisch. SChätze so 60Hz bis 100Hz. Ich probier weiter.
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.