Hallo,
hab hier echt ein merkwürdiges Problem...
Ich nutze folgenden Code für die Tasterfunktion:
1
$regfile="m8def.dat"
2
$framesize=32
3
$swstack=32
4
$hwstack=32
5
$crystal=1000000
6
7
8
ConfigPortb.1=Output
9
10
ConfigPinb.0=Input
11
Pinb.0=1
12
13
Do
14
IfPinb.0=0Then
15
Portb.1=1
16
Else
17
Portb.1=0
18
EndIf
19
Loop
20
End
So und jetzt kommt's:
Ich habe ne Grundschaltung auf einem Breedboard mit einem ATmega 8 (und
auch 32) zusammen gesteckt.
Wenn ich nun eine LED an Portb.1 stecke und ich einen Drhat in Pinb.0,
dann beginnt die Diode zu blinken...
Der Draht steckt in Pinb.0 hat aber kein Kontakt zur Masse, komme ich
nun dem Draht näher beginnt die LED schwächer/stärker zu leuchten bis es
dann anfängt zu blinken...
Hab die Grundschaltung mehrmals neu zusammen gesteckt, dieses Phänomen
habe ich mit dem ATmega 8 und 32...
Kondensatoren habe ich auch in die Grundschaltung mit eingebaut...
Der Strom kommt aus einen 9 Volt-Block über einen 7805er in die
ATmega-Grundschaltung...
Woran könnte das liegen, was mache ich Falsch???
Ich hab sogar einen ATmega 8 und auch 32 auf eine Lochrasterplatine
gelötet und das Problem habe ich immer noch....
Bin echt am Ende, komme einfach nicht mehr weiter... Würd mich echt
freuen, wenn einer ahnen könnte woran das liegt...
Viele Grüße
Moe
Daheim auf der Werkbank würde man jetzt die Schaltung näher untersuchen.
Ich schätze, das hast du schon gemacht, bist nicht weiter gekommen. Es
wäre wohl gut, wenn sich andere die Sache ansehen würden.
Das könnte man aus der Ferne machen, wenn Schaltplan und/oder Fotos vom
Aufbau vorhanden wären.
Wenn du dich entscheidest, deine Frage nachzubessern, bitte
Bildformate beachten.
> If Pinb.0 = 0 Then
[..]
> Der Draht steckt in Pinb.0 hat aber kein Kontakt zur Masse
[..]
> Woran könnte das liegen, was mache ich Falsch???
Floating gate. Pullup einschalten (oder einen solchen oder einen
Pulldown dranhängen) damit der Pin auf ein definiertes Level gezogen
wird.
HTH
Der absolute Hammer...
Hab jetzt erst mal von Pinb.0 einen 10K Widerstand auf 5V gesteckt und
siehe da es funktioniert tatsächlich...
Auf dem Bild erkennt ihr den Widerstand und den gelben Draht. Ohne 10k
spinnt die LED wenn ich dem gelben Draht zu nahe komme bzw. berühre...
Mit 10k funktioniert alles Prima...
Aber warum flakerte die LED ohne den 10 K Widerstand???
Ich dachte eigentlich, das entweder Strom am Pin ist oder kein Strom...
Wenn die LED flakert, dann bedeutet das ja, dass pinb.0 unterschiedlich
viel strom gibt...
Wenn die LED nur geflakert hätte wäre die logische SChlußfolgerung, das
der pinb.0 schnaller an / aus ist...
Aber das abschwächen der LED (also Dimmefekt) bedeutet ja, das mal 3
Volt oder 4 an Pin ist...
HAb noch zwei doofe Fragen, warum heißt es in Bascom mal Pin und mal
Port?
Bei der LED schreib ich Portx.x und beim TAster Pinx.x
Ein Port hat ja 8 Pins, oder? :-)
Wenn ich eine LED z.B. zum Blinken bringen will, müsste ich doch auch
Pinx.x schreiben...
Und die nächste dooef Frage, was ist Floating pin?
Entschuldigt, bin aber ein absoluter Beginner...
Vielen Dank für eure Hilfe hat wirklich was gebracht!!! Danke :-)
Wartet ma, ich hab noch eine Frage :-)
Wieder ne doofe...
Ein 10K Widerstand ist doch verdammt krass hochohmig, oder?
Also ich meine, da kommt doch kaum noch was von den 5 Volt durch...
Ja wenn größtmöglicher Widerstand, warum überhaupt einen Widerstand?
Der Größte Widerstand ist doch wenn erst gar keine Verbindung zwischen
pinb.0 und 5V ist...
Und Warum braucht ein Portb.1 (also da wo die LED steckt) kein
Widerstand?
Oh man, ich glaub ich muss noch viiiiiel lesen....
Wegen dem 10K-Widerstand Tip, bin ich echt sehr Dankbar!!!
Danke nochmal Juhuuu :-)
BTW hab mir son IS471F (so'n IR Sensor) geholt und es funktioniert auch
einwandfrei mit der IS471-Grundschlatung, wenn ich an Vout eine LED
gegen MAsse ziehe, nun will ich statt den TAster diesen IS471 anstecken,
mal sehen, ob dann die LED an Portb.1 an bzw. aus geht...
NA ja, jedenfalls bin ich mit dem 10k wesentlich weiter :-)
> Aber warum flakerte die LED ohne den 10 K Widerstand???
Ohne definierten Pegel ist der pin floatend - er ist 'irgendwo(tm)'. Mal
wird das auf 1 ausgewertet, mal auf 0, wo er halt gerade rumfliegt.
Kannst auch den internen Pullup aktivieren, dann sparst Du Dir den
externen 10k.
HTH
Nochmal ganz kurz zu dem 10K Widerstand...
Wozu 10k, wenn der Pull-Up (Pinx.x = 1) eingeschaltet ist?
Kann ich auch den internen Pull-Up beim Code schreiben völlig weglassen,
wenn ich einen 10K Widerstand nutze?
moe schrieb:> Ein 10K Widerstand ist doch verdammt krass hochohmig, oder?
Nein. Da fließen bei 5V schon 0,5mA! Zum Vergleich: Der Eingang ist so
hochohmig, dass der dort fließende Strom kleiner als 1µA ist (ohne
eingeschalteten Pullup)! Daher kannst auch durch Annäherung der Hand die
Eingangsspannung beeinflussen und 50Hz-Brumm aus der Umgebung
einkoppeln. Das war der Effekt, den Du beobachtet hast.
> Bei der LED schreib ich Portx.x und beim TAster Pinx.x
Pinx.x: das ist eine Abkürzung für "Port in", hat also mit dem "Pin"
nichts zu tun. Bei "Port out" heißt es dann nur Port...
Die Bezeichnungen hat Atmel für die Registernamen nun mal so festgelegt,
warum auch immer...
Gruß Dietrich
Hat das was mit Induktion zutun?
Da gibts doch diese Indukstionsschleifen auf der Strasse, bei den
Ampeln, wenn da ein Auto drüber fährt, da wird ja auch das Feld
beeinflusst, oder bei diesen Blitz-Plasma-Kugeln verändert sich ja auch
das VErhalten, wenn man mit der bloßen Hand drüber fährt...
Na ja wie auch immer, das Phänomen, welches ich beobachtet habe, klingt
wissentschaftlich :-), ist mir jetzt klarer geworden...
----
Ahhhh Pin steht für port in, also zusammen Pin...
Also kann ich demnach einen Pin nur Input setzen, gell? Also Config
Pind.6 = Output würde ja gar nicht gehen, würde sich ja widersprechen...
Ok, ich habs gerafft, danke dir :-)
Echt cool, das ihr alle auch so schnell geantwortet habt!
Tolles Wochenende euch...
Und Übrigens, nur so falls es euch interessiert, eben habe ich die
IS471-Schaltung mit der ATmega-Schaltung kombiniert, das funktioniert
auch ohne 10K...
Die Unterscheidung Pin und Port ist nicht nur in Bascom so,
ist bei den AVR generell so, das Pin-Register gibt an
welcher Zustand anliegt und kann nur gelesen werden.
Du kannst zwar sezten PinX.Y=1, aber die Eingabe geht ins
Nirvana. Zum setzten musst Du zwingend das Register "Port"
verwenden, nur dort wird der Pegel dann den Anschluss
ausgegeben bzw. der Pullup gesetzt.
Ob ein Anschluss Eingang oder Ausgang ist wird über das
DDR, das data direction register gesetzt.
Du hast also insgesamt 3 Register für jeden Anschluss, das
Pinregister, das Portregister und das DDR
> Und Übrigens, nur so falls es euch interessiert, eben habe ich die> IS471-Schaltung mit der ATmega-Schaltung kombiniert, das funktioniert> auch ohne 10K...
Wie Du dessen Datenplatt entnehmen kannst hat der einen 'internen
Pullup' mit drin zwischen Vcc und Vout, der übernimmt die Aufgabe von
Deinem externen 10k oder dem internen vom AVR - er zieht auf einen
definierten Pegel wenn der Ausgangstransistor sperrt.