PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AD Wandler will nicht :-/



ShadowPhoenix
01.05.2004, 14:22
Hallo!
ATmega8: AVCC, AGND und AREF sind geschalten!
VCC und GND natürlich auch!
Mein Programm:

$regfile = "m163def.dat"

Config Adc = Single , Prescaler = Auto
Config Portb = Output
Start Adc

Dim W As Word , Channel As Byte

Channel = 5
Do
W = Getadc(channel)
If W > 0 then Portb.0 = 0 else Portb.0 = 1
Loop
End

Aber es tut sich einfach nichts, wenn ich den PC.5 beschalte! (Sprich AD-Channel 5)
Was kann ich nur tun?
Habe am PC.5 genau 5V vom Netz mit 10k Widerstand vorgeschalten.

Der ADWandler scheint aber einfach nicht zu reagieren!
Wie kann ich den richtig benutzen?
Bitte helft mir, möchte den Chip nicht abrauchen!

MfG,
ShadowPhoenix

recycle
01.05.2004, 14:39
hattest du nicht mal irgendwann geschrieben du benutzt einen ATMega8 oder ATMega16?
Ich bin mir nicht 100% sicher, aber $regfile = "m163def.dat" hört sich für mich irgendwie so an, als wäre das für einen ATMeag163.

Dino Dieter
01.05.2004, 14:43
Hallo

Welchen uC hast du den jetzt ??

$regfile = "m163def.dat" ????

M8 oder einen M163. Kann so nicht gehen, da der 163 für den ADC eine andere Interruptadresse verwendet.

Trag mal ein und probiere nochmal, falls du einen MEGA 8 hast.
$regfile = "m8def.dat"


MFG
Dieter

ShadowPhoenix
01.05.2004, 15:06
Ok!
Mein Code schaut nun so aus:

$regfile = "m8def.dat"
Config Adc = Single , Prescaler = Auto
Config Portb = Output
Dim W As Word , Channel As Byte

Start Adc
Do
W = Getadc(5)
If W > 0 then Portb.0 = 0 else Portb.0 = 1
Loop
End

Nur die Led leuchtet von Anfang an, das heißt: W ist von Anfang an größer als 0!
Aber warum?
Der ADWandler sollte doch Anfangs den Wert 0 haben?
Habe auch schon IF W > 10 then... probiert!

Aber W scheint auch von Anfang an größer als 10 zu sein...
Was kann ich nur tun?

MfG,
ShadowPhoenix

recycle
01.05.2004, 15:21
Warum gibst du den Wert "W" in deinem Programm nicht einfach mal mit "Print W" auf die serielle Schnittstelle aus und guckst ihn die an?
Das ist vielleicht etwas aussagekräftiger als die LED.

Bist du sicher, dass die LED bei Portb.0=1 leuchtet und bei Portb.0=0 aus ist? Ich glaube das könnte eventuell auch umgekehrt sein.

Wenn 0 = Low bedeutet, würde das heisssen, dass der Port bei 0 auf GND liegt. Wenn die LED "oben" an 5V und "unten" am Port hängt, würde sie dann bei 0 leuchten und bei 1 ausgehen.

(kann aber sein, dass ich mal wieder völlig daneben liege)

Dino Dieter
01.05.2004, 15:29
Hallo

Ober schreibst du doch, du hast 5 Volt an PIN C 5. Dann ist w natürlich immer > 0.

5 Volt w = 1023 ,
2,5 Volt w = 512
0 Volt w = 0

MFG
Dieter

ShadowPhoenix
01.05.2004, 15:50
@recycle

Hmm, wie kann ich mit PrintW den Wert anzeigen lassen?
Besser: WO wird der Wert dann angezeigt?
Einfach nur PrintW... hmm ich hab leider kein HyperTerminal!

Du hast recht, bei 0 leuchtet meine Led, und bei 1 ist sie aus!
Aber ich schrieb doch:

[ WENN W grösser als 0 ist, DANN leuchte (0) ]

@Dino Dieter

Das Problem ist, die Led leuchtet auch, wenn ich 0V an PC.5 habe!
Schau, ich möchte einfach nur abfragen, ob PC.5 größer ist als 0, also ob mehr als 0.000 V anliegen.
Wenn ja, dann soll die Led leuchte, wenn nicht, dann soll die LED nicht leuchten!
Ich bekomm das irgendwie nicht hin :-(
W ist immer größer als 0!

recycle
01.05.2004, 16:00
Besser: WO wird der Wert dann angezeigt?
Einfach nur PrintW... hmm ich hab leider kein HyperTerminal!


Werte die du mit "Print" ausgibst werden im Terminal-Programm ausgegeben. Dass du kein "Hyperterminal" hast, sollte wohl nicht so das Problem sein, da in Bascom ein Terminalprogramm integriert ist.



Das Problem ist, die Led leuchtet auch, wenn ich 0V an PC.5 habe!


Was verstehst du unter "0V"? Beschaltest du den Pin für 0V gar nicht, oder legst du ihn auf Masse?

Dino Dieter
01.05.2004, 16:05
Hallo

Dann teste doch erstmal PORTB.0 ob er noch geht.

do
PORTB.0 = 0
wait 1
PORTB.0 = 1
wait 1
loop

Habe das Programm getestet und es geht so.

Schaff dir mal eine RS232 Verbindung zum PC. Ist doch super zum Fehler suchen.

MFG
Dieter

ShadowPhoenix
01.05.2004, 16:15
@recycle
Mit 0V meine ich garnicht angeschlossen.
Hmm nur das Terminalprogramm funzt irgendwie nicht.
Es wird garnichts angezeigt, egal was ich ausgeben will!

@Dieter
Rs232 hab ich keinen Programmierer usw..
Ich arbeite mit Parallelport, ist doch kein Problem, oder?
Der Portb funktioniert einwandfrei!

W scheint andauernd über 0V zu sein!
Der AVR ist neu!

Was kann ich nur tun? :-((
MfG,
ShadowPhoenix

Dino Dieter
01.05.2004, 16:22
Hallo

Wir meinen aber mit 0 Volt, du schließt ein Kabel an Masse und an den PORTC.5 an.
Die Eingänge sind so empfindlich, das sie, wenn sie in der "Luft hängen" alles mögliche empfangen.

Also nochmal PORTC.5 an 5 Volt w = 1023

PORTC.5 an Masse = 0 Volt w = 0

PORTC.5 nicht angeschlossen w = irgend ein Wert zwischen 0 und 1023

Aber wieso willst du für diese Abfrage eigentlich einen AD Port nehmen ?

MFG
Dieter

ShadowPhoenix
01.05.2004, 16:30
@Dieter

Nun, dass habe ich garnicht gewusst ;-)
So, jetzt habe ich den PC.5 einmal an die Masse gehangen, und siehe da:
Die Led erlosch. (Erster Erfolg, juhu)

Damit war mir klar:
"...Die Eingänge sind so empfindlich, das sie, wenn sie in der "Luft hängen" alles mögliche empfangen..." ;-)

Nur:
Wie soll ich dann zB einen Sensor auswerten, wenn der Pin ständig an Masse hängen muss, damit nichts geschieht?

Oder:
Meinst du es so:
PC.5 ist an Masse angeschlossen.
Sobald ich den Sensor auswerten möchte, wird von Masse auf Sensorausgang umgeschalten, und somit ausgewertet.
Aber:
Wie mache ich das am besten?
Da brauche ich ja wieder einen "Umschalter" von Masse auf Sensorausgang....

MfG,
ShadowPhoenix

PS: Das Anzeigen im Bascom-TERMINAL funktioniert nicht!
Ich kann ja nur COM1, COM2.... auswählen!
Nur unter "Programmer" kann ich den LPT auswählen.
Den habe ich auch richtig konfiguriert!

Dino Dieter
01.05.2004, 16:47
Hallo

Wenn du einen Sensor anschließt, hängt der PIN ja nicht mehr in der
Luft und bekommt sein Signal dann ja sauber von dem Sensor.

Wenn jedoch ein PIN nirgendwo angeschlossen ist, kann man nie
sagen was da gerade anliegt.

Mit der RS232 Schnittstelle verstehen wir uns falsch.

Du programmierst den AVR ja über die ISP Schnittstelle mit deinem
Programmer, der an der LPT Schnittstelle hängt. Das ist ja auch gut so.

Wenn du jetzt aber Daten von von dem AVR zum PC schicken willst
, z.B. mit PRINT " Hallo Welt", so brauchst du noch ein wenig Hardware und ein
Kabel zum PC.

Mach dich da mal schlau, ist ja Standart. MAX232 als Stichwort

MFG
Dieter

ShadowPhoenix
01.05.2004, 17:17
Vielen Dank!
Du hast mir sehr weitergeholfen!

Nun funktioniert alles so wie es soll =D>
Habe 6 LED's an den AVR angeschlossen und 1023 durch 6 dividiert.
170.5.
Dann die Abfragen:
If w >= 170 then portd.0 = 1 else portd.0 = 0 (0 ist nun aus, und 1 ein)
if w >= 241 then portd.1 = 1 else portd.1 = 0

Und siehe da, mein erster kleiner VOLTMETER :-)))
Umso mehr Spannung -> Umso mehr LEDS leuchten

MfG,
ShadowPhoenix

Kunki
01.05.2004, 18:35
hi ShadowPhoenix

habe so in etwa das gleiche problem. kannst du mir vielleicht dein kompleten Code schreiben? Damit ich es nachvollziehn kann, wäre echt net.

danke schon mal
Alex

ShadowPhoenix
01.05.2004, 21:10
$regfile = "m8def.dat"
Config Adc = Single , Prescaler = Auto
Config Portb = Output
Dim W As Word , Channel As Byte

Start Adc
Do
W = Getadc(5)
If W > 0 then Portb.0 = 0 else Portb.0 = 1
Loop
End

Das ist mein kleiner Code.
"W" hat den wert des PC.5 Ports! (Getadc(5))

MfG,
ShadowPhoenix