hallo profis, wollte einen einfachen ad-wandler programmieren, macht auch im studio 4 wie ich will, aber nicht auf der platine von "roland walter". led an portb0 pin 14, rechtes poti an adc3 pin 26. wenn ich im simulator in adch verschiedene werte > 128 bzw <128 schreibe und das adsc bit loesche, sieht es gut aus und er setzt auch portb, bit0 bzw loescht dasselbe. kann jemand helfen?
Da die REFS1 REFS0 Bits beide 0 sind, ist eine externe Ref.Spannung am
AREF-Pin gewählt. Falls Du da nichts angeschlossen hast, musst Du
entweder die internen 2.54V oder VCC als Referenzspannung wählen.
zB:
ldi temp, (1<<REFS1) | (1<<REFS0) | (0<<MUX3) |(0<<MUX2) | (1<<MUX1)
| (1<<MUX0) ; Kanal 3 int. ref Spannung 2,56V
out ADMUX, temp
ldi temp, (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0)
out ADCSRA, temp
Gute Nacht.
erstmal danke an 'herrmüller', jedoch funktioniert die schlatung immer noch nicht bzw hab ich was übersehen bzw falsch verstanden. anbei das modifizierte listing und ein bild des boards. gruss bernhard.
Gast
#2076875
Hi >jedoch funktioniert die schlatung immer noch nicht bzw hab ich was >übersehen bzw falsch verstanden. Ja. Du musst die Einstellung für REFS1/REFS0 ändern. MfG Spess
Gast
#2076915
Hi Und der Teil, wo du dem ADC sagst, das er Messen soll fehlt auch. Vielleicht solltest du mal überlegen, ob du dir nicht mal einen Monitor anzuschaffst, der etwas breiter als 480 Pixel ist. Dann kann muss der Code nicht so an der linken Seite kleben. MfG Spess
hallo spess53, laut datenblatt table74 habe ich beide optionen ohne erfolg probiert, refs1=0 & refs0=1 avcc with external capacitor at aref pin refs1=1 & refs0=1 internal 2.56 voltage ref kondensator habe ich noch keinen dran, ich denke eine reaktion müsste auch ohne denselben erfolgen. gruss bernhard.
hallo spess53, ich denke das waere der code für die messung ?!? wenn ich werte in das adch register schreibe und mit f11 durchtippe, funktioniert es auch. zum monitor: hab leider nur ein altes laptop und mit einer kleineren auflösung habe ich probleme mit den augen. sbic adcsra,adsc ; warte bis adc fertig rjmp warte ; skip if bit in i/o is cleard in r16,adch ; lese ergebnis mfg ernhard.
hall spess53, habe das ganze jetzt mit bascom probiert, funktioniert wunderbar, hätte aber gerne was ähnliches in assembler. das ich noch am anfang meiner kariere muss ich nicht extra betonen. gibt es eine möglichkeit den code zu disamblieren um fehler zu erkennen ? $regfile "m8def.dat" $crystal = 3686400 Dim Ad As Word Config Portb = Output Config Adc = Single , Prescaler = Auto , Reference = Avcc Start Adc Do Ad = Getadc(0) If Ad <= 340 Then Portb.0 = 1 : Portb.1 = 0 : Portb.2 = 0 Elseif Ad > 340 And Ad <= 680 Then Portb.0 = 0 : Portb.1 = 1 : Portb.2 = 0 Elseif Ad > 680 Then Portb.0 = 0 : Portb.1 = 0 : Portb.2 = 1 End If Loop gruss bernhard.
Gast
#2076979
Hi Ohne ein 'sbi adcsra,adsc' zum Starten der Messung macht der ADC nichts MfG Spess
lo, vielen dank für deine geduld, hab das programm geändert, funktioniert immer noch nicht schluchz. warum funktioniert es im simulator, wenn ich das acsc-bit setze bzw lösche und in das adch register werte reinschreibe ??? gruss bernhard.
noch eine frage: muss das ddrc pc3(adc3) auf null (eingang) gesetzt werden? mfg b
Gast
#2077200
Hi Leute, so wie dieses Programm geschrieben ist, blickt doch keiner durch. Versucht doch bitte etwas Struktur durch Absätze zu bekommen, das man das dann auch lesen kann. Hier mal ein paar Zeilen, die bei mir problemlos laufen.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
Soweit die Initialisierung. Nun das Lesen der Werte:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
Auch wenn das noch nicht perfekt ist, doch so ein Aufbau ist natürlich besser zu lesen. Und das auch nach einem Jahr. Gruß oldmax
mit diesem listing kann ich leider noch gar nichts anfangen. das datenblatt kenne ich inzwischen, haette gerne gewusst wo der fehler liegt. ; ad wandler mit atmega 8 ;.nolist .include "m8def.inc" .list ; led an portb, pb0 als ausgabe ; ddrb = 1 sbi ddrb,pb0 ;port c3 auf eingang cbi ddrc,pc3 ;** herr müller kanal int ref spannung 2,56 v, adc0 ldi r16,(0<<refs1)|(1<<refs0)|(0<<mux3)|(0<<mux2)|(0<<mux1)|(0<<mux0) out admux,r16 ldi r16,(1<<aden)|(1<<adfr)|(1<<adps2)|(1<<adps1)|(1<<adps0) out adcsra,r16 convert: sbi adcsra,adsc ; start conversion warte: sbic adcsra,adsc ; warte bis adc fertig rjmp warte ; skip if bit in i/o is cleard in r16,adch ; lese ergebnis cpi r16,128 brlo convert_led_an sbi portb,pb0 rjmp convert convert_led_an: cbi portb, pb0 rjmp convert
Bernhard Fraunhofer schrieb: > ldi r16,(1<<aden)|(1<<adfr)|(1<<adps2)|(1<<adps1)|(1<<adps0) > out adcsra,r16 Du veränderst deine Konfigurationsbits schneller, als andere Leute ihre Unterwäsche. Was hat auf einmal ADFR da drinnen zu suchen. Selbst wenn die den Free Running MOdus benutzt, musst du die erste Messung immer noch händisch durch Setzen des ADSC starten. > convert: > > sbi adcsra,adsc ; start conversion > warte: > sbic adcsra,adsc ; warte bis adc fertig Das wirst du im Free Running Modus nicht erleben. Denn im Free Running ist der ADC NIEMALS fertig, weil sofort mit Abschluss einer Messung die nächste Messung beginnt. > das datenblatt kenne ich inzwischen vielleicht hilft dir das mehr: http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC Und arbeite an deiner Formatierung! Deine ist grauenhaft! Alles an den linken Rand zu quetschen ist maximal der Versuch, Labelnamen im Text unergehen zu lassen. Wenn eine einzelne Leerzeile nicht ausreicht, eine Blockstruktur zu erreichen, dann schaffen das mehrere Leerzeilen hintereinander auch nicht. Sie ziehen nur den Code in die Länge, bringen aber ansonsten genau 0 mehr an Übersicht.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
Wenn du nur das ADCH Register benutzen willst, musst du ADLAR benutzen. Ansonsten kann ADCH nur die Werte 0, 1, 2 und 3 haben.
Und wenn du das nächste mal einen LÖtkolben zur Hand nimmst, dann setz deine Kondensatoren tiefer! Die Beinchen werden dir bald abreissen. Ein paar mal unabsichtlich hin und her und schon sind sie durch. Oder du drückst unabsichtlich von oben auf einen der Kondensatoren und reißt damit von der Unterseite die Leiterbahn von der Platine weg. Schieb sie rein, bis du sie nicht mehr weiter reinkriegst! Am besten soll das Gehäuse auf der Platine aufsitzen und der Kondi sich nicht mehr bewegen lassen.
Gast
#2078689
Hallo Bernhard
Du scheinst etwas stur zu sein, was ich noch als geschmeichelt
betrachte...
>mit diesem listing kann ich leider noch gar nichts anfangen.
Eigentlich wollte ich dir damit mitteilen, das es einmal die Möglichkeit
gibt, Codezeilen auch als solche kenntlich zu machen und zum Anderen,
das deine Schreibweise wie auch KHB feststellt, grauenhaft ist.
Es scheint dir aber völlig egal zu sein, wie deine Antworten erkennen
lassen.
NA dann viel Spaß noch..... Ich für meinen Teil werd mich nicht durch
solch unleserlichen Code kämpfen.
Gruß oldmax
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
