Forum: Mikrocontroller und Digitale Elektronik ATmega 8 Taster Phänomen?


von moe (Gast)


Lesenswert?

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
Config Portb.1 = Output
9
10
Config Pinb.0 = Input
11
Pinb.0 = 1
12
13
Do
14
   If Pinb.0 = 0 Then
15
      Portb.1 = 1
16
   Else
17
      Portb.1 = 0
18
   End If
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

von Krapao (Gast)


Lesenswert?

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.

von g457 (Gast)


Lesenswert?

> 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

von g457 (Gast)


Lesenswert?

> Floating gate

..streiche 'gate', setze 'pin'.
</ingrid>

von moe (Gast)


Angehängte Dateien:

Lesenswert?

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 :-)

von moe (Gast)


Lesenswert?

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 :-)

von g457 (Gast)


Lesenswert?

> 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

von moe (Gast)


Lesenswert?

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?

von moe (Gast)


Lesenswert?

In dem Code ganz oben ist ja der Pull-Up aktiviert mit "= 1", aber erst 
nach dem 10k Widerstand funktionierte es einwandfrei...

von Martin (Gast)


Lesenswert?

Portb.0 = 1

würde den Pullup aktivieren...

von Dietrich L. (dietrichl)


Lesenswert?

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

von moe (Gast)


Lesenswert?

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...

von elektronikbastler (Gast)


Lesenswert?

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

von g457 (Gast)


Lesenswert?

> 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.

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
Noch kein Account? Hier anmelden.