PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 5 Volt direkt auf den Eingang legen



meddie
16.09.2008, 15:43
Hallo Leute,

ich hab nach langen überlegen mir einen RN-Control Board zugelegt.
Da ich ein absoluter Anfänger bin, mich aber die Microcontroller schon immmer fasziniert ahben, ahbe ich mich entschieden einfach das o.g. Board zu holen um einfach mal zu probieren. Ich denke das ist die beste möglichkeit so mehr zu lernen.

Nun wollte ich einfach mal ein kleines eigenes Programm zu schreiben, dass einfach einen Port abfrägt. Darf ich dazu einfach die 5 Volt Uref direkt auf einen Port verdraten. (Um einen Signal zu simulieren)

Danke im Voraus

ikarus_177
16.09.2008, 16:39
Hi meddie,

klar kannst du die 5V direkt auf einen Port legen, der uC erkennt das dann bei der Abfage als logisch 1. 0V (also GND) werden dann als logisch 0 interpretiert.


Viele Grüße
ikarus_177

Dirk
16.09.2008, 16:45
Darf ich dazu einfach die 5 Volt Uref direkt auf einen Port verdraten. (Um einen Signal zu simulieren)

Ja, du verbindest dazu den Eingang wechselweise mit +5V (z.B. JP1 Pins 1..3) oder mit GND (z.B. JP1 Pins 4..6).

Ich weiß nicht, was du mit "5 Volt Uref" meinst. Am Stecker UREF steht +5V auch an Pin 1 zur Verfügung, da würde ich aber nicht drangehen, sondern an den "offiziellen" JPs bleiben.

Wenn du sehr vorsichtig bist (waren wir alle am Anfang), kannst du einen Widerstand von z.B. 470 Ohm vor den Eingang schalten. Dann ist es auch bei einer Fehlprogrammierung (z.B. wenn du versehentlich den "Eingang" im Programm als Ausgang definiert hast) nicht möglich, den Port zu zerstören.

Gruß Dirk

meddie
16.09.2008, 18:11
Sorry ich weiß nicht was mich da geritten hat, als Uref geschrieben habe. Ich meinte damit die 5V, die fürexterne Hardware bereitgestellt ist.

Dann nehme ich lieber einen Widerstand her, denn im Programmieren bin ich nicht der hellste, und gehe lieber auf eine Nummer sicher.

Vielen Dank für die Info.

meddie
18.09.2008, 12:14
Ich habe nun folgendes Programmchen geschrieben:


$regfile = "M32def.dat"
$crystal = 1600000
$hwstack = 32
$swstack = 32
$framesize = 32


'LED1 an PB1
Led1 Alias Portc.1
Config Led1 = Output

'LED2 an PB2
Led2 Alias Portc.2
Config Led2 = Output

'TASTER1 an PD2
Taster1 Alias Pind.2
Config Pind.2 = Input
'Portd.2 = 1 'PullUp-Widerstand einschalten


Do
If Taster1 = 1 Then
Led1 = 0
Led2 = 1
Else
Led1 = 1
Led2 = 0
End If
Loop


End


wenn ich mit GND auf den PORTD.2 gehe wechseln die beiden LED.

Wenn ich mit +5V drauf gehe (mit einem 470 Ω Widerstand), dann passiert nichts.
Kann mir jemand sagen was ich falsch mache.

MeckPommER
18.09.2008, 13:17
Du machst nichts falsch, das ist ganz richtig so. Da du den PullUp-Widerstand eingeschaltet hast, liegt der Eingang und "Ruhezustand" auf logisch "1". Wenn du den Eingang auf +5V legst, ändert sich daran nichts. Erst wenn du den Eingang auf GND legst, bekommt der µC den Wechsel mit und schaltet LED1 an und LED2 aus.

Gruß MeckPommER

meddie
18.09.2008, 13:31
wie muß dann der Code aussehen, wenn ich mit + 5V schalten möchte

MeckPommER
18.09.2008, 13:51
Dann musst du einfach die PullUps ausschalten und solltest vom Eingangspin einen PullDown Widerstand (ca. 10KOhm) nach GND legen.

Der Sinn der PullUps/Pulldowns ist es, dem Eingang einen definierten Zustand zu verleihen. Liegt der Eingang unbeschaltet "in der Luft" ist sein Potential nicht definiert und es kann zu Störungen in Form von irgendwelchen, vielleicht flackernden Werten am Pin kommen.
Damit dies nicht passiert, wird ein Eingang mit einem Widerstand entweder an GND oder VCC gelegt.

meddie
18.09.2008, 15:20
Aber der PullUp wiederstand ist doch aus der ist ja ausgeklammert.

jeffrey
18.09.2008, 15:24
aber ohne pull-up oder pull-down hast du nen undefinierten zustand. das ist schlecht. ein port kann entweder 0 oder 1 sein, es gibt kein nix angeschlossen, oder so.
mfg jeffrey

meddie
18.09.2008, 15:39
das heiß ich muss

es dann so machen:


'TASTER1 an PD2
Taster1 Alias Pind.2
Config Pind.2 = Input
Portd.2 = 0 'PullUp-Widerstand einschalten bzw. Pulldown


Do
If Taster1 = 1 Then
Led1 = 0
Led2 = 1
Else
Led1 = 1
Led2 = 0
End If
Loop

Und ich tu 5 direkt ohne Widerstand an den Pind.2 oder?

MeckPommER
18.09.2008, 15:48
Die Atmegas haben einen eingebauten Pull-Up, den man an- und abschalten kann. Leider haben sie aber keinen Pull-Down, den man irgendwie aktivieren könnte.

Du hast in deinem Listing den Pull-Up abgeschaltet, das ist auch ganz richtig so, aber nun müßtest du halt noch (in realer Hardware ^^) einen PullDown-Widerstand (10-20kOhm) vom Eingang nach GND legen.

Ob du nachher zum Schalten direkt mit 5V oder mit nem kleinen Widerstand <1kOhm an den Pin gehst, dürfte keinen unterschied machen.

meddie
18.09.2008, 15:54
Ja genau so habe ich das jetzt gemacht, ich habe vom GND einen 10k &Omega; Widerstand auf PortD.2 gelegt. Nun wenn ich mit einem 470 &Omega; Widersand auf den PortD.2 gehe passiert nichts. Und das verstehe ich nicht.

MeckPommER
18.09.2008, 16:03
Wenn sich nichts tut, wenn du den PortD.2 auf log. "1" legst, kann das nur bedeuten, das er schon auf log "1" war. Oder du hast du im Wert des Widerstandes verguckt, so das VCC über 470 Ohm nicht reichen, oder ...

Hast du die LEDs gegen VCC oder gegen GND beschaltet? Anhand der LED müßtest du ja sehen können, ob "0" oder "1" anliegt.

meddie
18.09.2008, 16:44
Habe gerade nochmal alles nachgemessen. Beide Widerstände sind richtig von den Werten her. Der eine ist 10k und der Andere 470 Ohm. Sind auch zu 200% nicht vertauscht worden.

Wenn ich den Port toggeln laße dann gehen die led nicht an! Kann es sein daß der Port kaputt ist? Aber wieso reagiert er wenn ich den Taster auf GND lege.

ich verstehe das einfach nicht.

meddie
18.09.2008, 16:49
sorry toggeln geht:


Dim Var As Byte

Config Pind.2 = Output ' portB.0 is an output now




Do

Toggle Portd.2 'toggle state

Waitms 2000 'wait for 1 sec

Loop

meddie
18.09.2008, 16:50
Kann es sein dass der Takt des Controllers falsch geht? Wenn ich sage waitms 2000 dann sollten es doch 2 Sekunden sein oder?

meddie
18.09.2008, 16:57
Also Auf Port D toggelt der Pin 0 und 1 nicht. Pin 2 - 7 schon. Kann es sein daß bei dem RN-Control die beiden Pins für was anderes reserviert sind?

ikarus_177
18.09.2008, 17:01
Hi,

kommt drauf an, ob du die UART aktiviert hast. Das erkennt man an der Zeile

$Baud = X.

Wenn die UART aktiviert ist, sind diese beiden Ports "reserviert" und können nicht anderweitig verwendet werden.


viele Grüße
ikarus_177


PS: es gibt einen EDIT-Button :-#

meddie
18.09.2008, 17:12
$baud habe ich nicht. Zumindestens nicht in diesem kleinen Programm. Aber ich programmmiere das Teil über RS232. Aber beim Programmieren blinkt die PortC.2 Portc.3.

ikarus_177
18.09.2008, 17:20
Hmm, hast du denn den Programmierstecker beim Testen des Board abgenommen, oder stecken gelassen? Wenn er noch steckt, kann es sein, dass sich da der PC und der uC in die Quere kommen.

lg ikarus_177

meddie
18.09.2008, 20:06
ich habe ihn stecken lassen.

meddie
19.09.2008, 14:50
Kommisch habe heute das gleiche Probiert nur den Eingagn am Portb. Um sicher zu gehen, daß die Pins nicht durch etwas anderes blockiert werden. Geht auch nicht.

Ich verstehe das nicht. Es muss doch möglich sein, mit +5 Volt schalten.

Dirk
19.09.2008, 18:05
Hallo meddie,

Ich verstehe das nicht. Es muss doch möglich sein, mit +5 Volt schalten.
Sicher ist das möglich.

Du hast im Prinzip 2 Möglichkeiten:

1. Schalter nach Plus:
Schalter/Taster liegt zwischen +5V und dem Eingang des uC,
ein sog. Pulldown-Widerstand (10 kOhm) zwischen dem Eingang und GND

2. Schalter nach GND:
Schalter/Taster liegt zwischen GND und dem Eingang des uC,
ein sog. Pullup-Widerstand (10 kOhm) zwischen dem Eingang und +5V.
Bei dieser Variante kann man auch anstelle des Pullups den internen Pullup-Widerstand des uC einschalten.

Um die beiden Varianten (technisch) gut umzusetzen, wäre noch ein keramischer Kondensator 10..100 nF jeweils zwischen dem Eingang und GND als Entprellung von Vorteil.

Dann klappt das auch mit dem Schalten! [-o<

In Variante 1 hat der Eingangspin Highpegel (1), wenn der Taster gedrückt wird, sonst dauerhaft Low (0).
In Variante 2 hat der Eingangspin Lowpegel (0), wenn der Taster gedrückt wird, sonst dauerhaft High (1).

Gruß Dirk

meddie
19.09.2008, 21:58
Ist bei mir genau andersrum. Wenn ich mit dem Gnd schalte ist der Pin 0 und erst wenn ich gnd drauf lege dann wird der pin 1. (so zeigen es die Leds) wenn ich versuche mit 5 volt zu schalten bleibt der pin immer auf 0.

kann es sein daß das board einen defekt hat. ich habe es gebraucht hier im board gekauft. es läßt sich aber einwandfrei programmieren und ich kann mit den ports toggeln. und das beispielprogramm von roboternetz funktioniert auch einwandfrei.

MeckPommER
19.09.2008, 22:36
Kurzer Einwurf:

Je nachdem, ob deine LEDs vom Ausgangspin nach GND oder nach VCC beschaltet sind, leuchten sie, wenn am Ausgangspin eine "1" oder eine "0" anliegt. Sind deine LEDs als nach VCC beschaltet, leuchten sie, wenn der Ausgangspin "0" ist, und leuchten nicht, wenn er logisch "1" ist.

Dies, in Zusammenhang mit den unterschiedlichen Taster-Schaltungsmöglichkeiten, kann manchmal ganz schön verwirrend sein.

meddie
19.09.2008, 22:50
Einen Augenblick lang habe ich Gedacht langsam den Durchblick zu bekommen. Nun ist es wieder vorbei.

Aber mir ist auch aufgefallen, dass sich die LED etwas kommisch verhalten. Besser gesagt genau anders rum.

Aber ich habe trotzdem das Problem mit dem +5v schalten. ich werde mal morgen oder am sonntag mal ein paar bilder machen, von meinem test aufbau. vielleicht wird es dann ersichtlicher.

noch eine andere Frage dazwischen. Wenn ich eingebe waitms 1000 das üßte eine Sekunde sein oder? Bei mir ist nicht mal eine halbe Sekunde.

MeckPommER
20.09.2008, 01:50
Mit der Frequenzangabe im Code allein ist es nicht getan. Diese muß mit den gesetzten Fuses übereinstimmen, damit das mit dem Timing und den Pausen auch stimmt.
Die Fuses bestimmen die Geschwindigkeit, mit dem der Controller läuft.
Die Angaben in Bascom justieren Befehle wie Wait so, das sie stimmig sind, wenn der Controller auf diese Frequenz eingestellt ist.

Dirk
20.09.2008, 08:03
Hallo meddie,

Ist bei mir genau andersrum. Wenn ich mit dem Gnd schalte ist der Pin 0 und erst wenn ich gnd drauf lege dann wird der pin 1. (so zeigen es die Leds)
Bei dir ist es auch nicht "andersrum", wenn du genau so wie beschrieben beschaltet hast.
Allerdings (wie MeckPommER schon sagt) benutzt du die LEDs, um den Status festzustellen. Da spielt die Beschaltung der LEDs wieder eine Rolle.

Mach es doch 'mal mit Textausgaben über RS232:
Wenn der Eingangspin 1 meldet, wird z.B. "High" ausgegeben und umgekehrt.
Noch eine Anmerkung:
Für deine Tests solltest du nur FREIE Pins benutzen, also die, die keine andere Verwendung haben.

Gruß Dirk

P.S.: Ich denke nicht, dass dein Board defekt ist!

meddie
21.09.2008, 21:39
so jetzt stelle ich die bilder rein, da sieht man wie ich den "taster" angeschlossen habe.

http://www.fam-markus.de/fotoforum/avr/avr1.jpg
http://www.fam-markus.de/fotoforum/avr/avr2.jpg
http://www.fam-markus.de/fotoforum/avr/avr3.jpg
http://www.fam-markus.de/fotoforum/avr/avr4.jpg

vielleicht mache ich doch was falsch.

danke im voraus.

meddie
22.09.2008, 22:35
Ist das so richtig mit den Taster.?
Ich gehe mit einem 10 K Widerstand von GND zum Port und von 5 Volt mit einem draht ebenfalls auf den Port.

jeffrey
23.09.2008, 00:36
hoi,
ansich stimmt das so. vielleicht hat dein taster nen mackjen, halte doch mal das kabel direkt an die klemme, bzw ziehe es dor dann ab. du weißt schon, dass die led nur solange an ist, wie der taster gedrückt ist. welche led leuchtet den nun jetzt?
eine led zu toggeln geht ja wohl, wie du geschrieben hast. dann änder das progrmm mal in etwa so:

do
led=taster;
loop


mfg jeffrey

meddie
23.09.2008, 13:55
jetzt habe ich geschafft, hurra!!!!
also wenn der port high ist dann ist die led aus. das war ein denkfehler von mir. und scheinbar habe ich irgendwo einen schlechten kontakt gehabt.

jetzt geht es. Danke an Alle für Eure Hilfe und die Geduld mit mir.

meddie
23.09.2008, 14:16
Eine Frage, trotzdem, ich habe die Wiki grad durchgewälzt, habe ich es richtig verstanden, die Fusebits kann ich nur mit dem ISP Programmer setzen oder?

Ich programmiere mit einen RS-232 Kabel.