Pulldown einbauen!
Druckbare Version
Pulldown einbauen!
hi,
irgendwie is da noch was durcheinander, du fragst doch pina.0 ab. was macht die aussage '...sobald einmal kurz spannung an pina.4 anliegt...', meinst du die spannung, die der avr eingeschaltet hat oder legst du fröhlich an pina.4 spannung an und erwartest, dass pina.0 darauf reagiert?
du hast auch wieder geschrieben: if pina.0 = 0 then ' wenn spannung anliegt
es ist so: liegt spannung an, wird der pin als 1 gelesen, keine spannung liefert 0.
probierst du:
if pina.0 = 0 then reset porta.4 else set porta.4
kürzer geht's nimmer und muss funtzen, aber nur wenn die led an A4 und der spannungseingang an A0 hängt.
grüssens, harry
es geht :)
hier das Programm
'Roboter Projekt
'-------------------------------------------------------------- ---------------
$regfile = "m32def.dat" 'AT Mega 32
$crystal = 8000000 'Quarz: 8 MHz
'------------------ Pin setzten -----------------------------------------------
Ddra = &B11111111 'Pin PA 3-7 auf Output setzen
Do
If Pina.0 = 1 Then Reset Porta.4 Else Set Porta.4
Loop
End
aber nur weil jetzte A0 auch Output ist ...
Ddra = &B11111111
es lag nun wirklich an diesem
Ddra = &B11111111
'Roboter Projekt
'-------------------------------------------------------------- ---------------
$regfile = "m32def.dat" 'AT Mega 32
$crystal = 8000000 'Quarz: 8 MHz
'------------------ Pin setzten -----------------------------------------------
Ddra = &B11111111 'Pin PA 3-7 auf Output setzen
Ddrb = &B00000001 'Pin PB 0 auf Output setzen
'------------------------------------------------------------------------------
'------------------ MainLoop --------------------------------------------------
'------------------------------------------------------------------------------
Do
'------------------ Motore einschalten ----------------------------------------
Porta.3 = 1 'Motor Rechts einschalten
Porta.6 = 1 'Motor Links einschalten
'################################################# ################################################## ###################
If Pina.0 = 1 Then 'Wenn bei PA0 Spannung anliegt
'rückwärts fahren
Porta.4 = 0 'vorwärts Rechts
Portb.0 = 0 'vorwärts Links
Porta.5 = 1 'rückwärts Rechts
Porta.7 = 1
End If 'rückwärts Links
'################################################# ################################################## ###################
If Pina.0 = 0 Then 'Wenn keine Spannung bei PA0 anliegt
'vorwärts fahren
Porta.4 = 1 'vorwärts Rechts
Portb.0 = 1 'vorwärts Links
Porta.5 = 0 'rückwärts Rechts
Porta.7 = 0 'rückwärts Links
End If
'################################################# ################################################## ###################
Loop
End
hi,
'nen input als output deklarieren müssen damit er gelesen werden kann ist nicht wirklich gagig. ich verwend immer config xxxx = input, ist deutlicher.
trotzdem toll dass es marschiert, gruss, harry
so weit so gut , aber da gibt es noch ein Problem :-s
wenn man von einer 5V Batterie genau 5V vcc auf A0 anlegt funktioniert das ganze auch \:D/
aber sobald man ein Widerstand oder Transistor mit vor A0 baut wird kein Input an diesem Pin gemessen :-k
als Input soll ein Impuls von dem IS471F (IR Diode) gemessen werden sobald er was erkennt hat (Hinternis) ... deswegen muss ich einen Transistor einbauen ...
kommt einfach nicht hin, ich fahre inputs grundsätzlich über 5k6 widerstand an, damit ich's nicht versehentlich 'himmle', wenn mal an der spannung was blöd is. über 5k6 kannste input's noch mühelos lesen, bei zu hohem vorwiderstand wird der avr anfälliger für störungen. ein input MUSS als input definiert werden können und dann auch so funktionieren, alles andere wäre gesundgebetet.
also, alles durchchecken, fehler finden, korrigieren, freuen weil's perfekt geht, und vor allem sich niemals mit 'halbechten' lösungen zufriedengeben, das rächt sich immer an anderer stelle.
grüssens, harry
ist so ein Pulldown dann ein 5k6 Widerstand ?
könnte es vielleicht sein das der obere Code nicht gegangen ist weil kein Pulldown widerstand eingebaut war und jetzte mit pulldown gehen müsste ?
würde ich nicht als pulldown nehmen, geht zwar, aber dann müsste der 'signalstrombegrenzungswiderstand' (was'n wort, odda???) so niedrig gewählt werden können, dass (blöde anschaltung vorausgesetzt) der avr gekillt werden kann. ich hantier in meinen schaltungen immer mit 5v und 24v rum, da is schnell mal versehentlich (oooohps) der 24v zweig auf den input vom avr gelegt, deswegen verwende ich immer 47k als pulldown und 5k6 als 'signal...' wenn du nur 5v handlest (oder immer alles top im griff hast) kannst dun natürlich auch pulldown von 5k6 und keinen begrenzer nehmen (oder halt so um 1k). der begrenzer und der pulldown bilden ja einen spannungsteiler und der darf das signal nicht soweit 'runterziehen', dass der avr es nicht mehr als high erkennt. also nie 1:1, immer > 1:5.
die nummer mit pulldown hatten wir weiter oben schon, ich dachte der wär in der schaltung drinne, aber richtig, wenn ein input 'in der luft hängt' reicht ein muckenschiss an störung, um ihn high oder low zu setzen, wie er gerade lustig ist. input's immer auf einem klaren pegel führen.
gruss + viel spass, harry
also ich habe direkt an den pin vom M32 einen Printklotz (so ein Teil wo man ein Kabel anklemmen kann) hingebaut , d.h. der Input hängt direkt in der Luft !
wie du es nun gesagt hast könnte es vielleicht daran liegen das es so automatisch immer auf rückwärts gestellt hat so das es eigentlich nie vorwärts fahren konnte ...
ist es nun wirklich so das es an diesem gelegen ist das es mit dem Input nie geklappt hat ?
muss ich dann einen widerstand direkt an den Pin bauen und dann den Printklotz danach ?
dann wäre ja das problem gelöst ?!?