Archiv verlassen und diese Seite im Standarddesign anzeigen : 5 Volt direkt auf den Eingang legen
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
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
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.
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
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.
Aber der PullUp wiederstand ist doch aus der ist ja ausgeklammert.
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
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.
Ja genau so habe ich das jetzt gemacht, ich habe vom GND einen 10k Ω Widerstand auf PortD.2 gelegt. Nun wenn ich mit einem 470 Ω 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.
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.
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
Kann es sein dass der Takt des Controllers falsch geht? Wenn ich sage waitms 2000 dann sollten es doch 2 Sekunden sein oder?
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 :-#
$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
ich habe ihn stecken lassen.
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.
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
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.
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.
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!
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.
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.
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
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.
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.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.