Naja, bist auf einem guten Weg.
Wenn du den Simulator richtig anwenden kannst, dann ist schon viel gewonnen, die meisten Fehler kann mann da schon gut erkennen. Die Einzelstep und Schleifenfunktion ist schon geil.
Druckbare Version
Naja, bist auf einem guten Weg.
Wenn du den Simulator richtig anwenden kannst, dann ist schon viel gewonnen, die meisten Fehler kann mann da schon gut erkennen. Die Einzelstep und Schleifenfunktion ist schon geil.
hy hab das programm in den mega8 geladen
nur es funktioniert nicht?!
taster is ein kleiner taster
ausgang derzeit ne led an 200ohm gegen masse
interupt eingang noch nicht getestet.
so, jetzt zu den fehler.
hab alles mögliche probiert sogar ne zusätzliche abfgae eingebaut damit der taster echt nur bei gegen masse funktion hat
mit pullup widerstand gegen +5 am taster auch schon probiert
port & pin getestet, wobei ich noch immer nicht genau weiß was der unterschied is, funktioniert jedenfalls im simulator ohne probleme!!!
sogar ne debounce eingebaut, aber hat nie richtig im simulator funktioniert.
bitte hilfe, es kann ja nicht sein das programm im avr richtig funkt & im mega 8 nicht.
led leuchtet nie!!!!!!!!!!!!!!!!!
mega 8 sollte funktioniern da schon ein testprogramm für display ansteuerung gefunkt hat
hier das aktuelle programm
mfgCode:$regfile = "m8def.dat"
$baud = 9600
$crystal = 8000000
Config Pinb.2 = Input
Config Pinb.1 = Output
Config Portb.2 = Input
Dim Irq0 As Word
'' Interrupt Int0 config
On Int0 Irq0
Config Int0 = Rising
Enable Int0
Enable Interrupts
Do
''abfrage ob taste gedrückt & Kontrolle ob irq0 noch nicht über 800
Abfrage:
If Pinb.2 = 0 Then
Waitms 250
End If
If Pinb.2 = 0 Then
Gosub Rauf
End If
Waitms 20
If Irq0 > 5 Then
Gosub Halt
Else
End If
Loop
'' bei Int0 wird irq0 um 1 erhöht
Irq0:
Incr Irq0
Return
'' wenn 800 impulse ereicht dann motor stopp
Halt:
Irq0 = 0
Reset Pinb.1
Waitms 100
Return
'' wenn 800 interruptimpulse noch nicht erreicht sind motor läuft weiter
Rauf:
Set Pinb.1
Waitms 100
Return
piri
kleines update
hab da programm jetzt so geändert damit es auf tastendruck funktioniert.
nur der gabellichtschranke macht probleme, led (motor) geht nach x impulsen nicht aus.
wenn ich den int0 mit finger berühre funktionierts, also dürft vielleicht das ganze nicht mit gabellichtschranke funktionieren?!
gabellichtschranke gp1a73e http://document.sharpsma.com/files/gp1a73a_e.pdf
hab sie mit ausgang (47k) gegen 5v und vcc (330ohm) gegen 5v beschalten
vielleicht funkt das gar nicht mit gp1a73
mfg
piri
danke für tips
aktuelle code, mit veränderungen, hab die veränderungen teilweise aus andren codes kopiert, weil mit denen zumindest die led an funkt!
Code:$regfile = "m8def.dat"
$baud = 9600
$crystal = 8000000
Config Pinc.2 = Input
Config Portb.1 = Output
Dim Irq0 As Word
'' Interrupt Int0 config
On Int0 Irq0
Config Int0 = Falling
Enable Int0
Enable Interrupts
Do
''abfrage ob taste gedrückt & Kontrolle ob irq0 noch nicht über 800
Abfrage:
If Pinc.2 = 0 Then
Gosub Rauf
End If
Waitms 100
If Irq0 > 2 Then
Gosub Halt
Else
End If
Loop
'' bei Int0 wird irq0 um 1 erhöht
Irq0:
Incr Irq0
Return
'' wenn 800 impulse ereicht dann motor stopp
Halt:
Irq0 = 0
Portb = &B00000000
Waitms 100
Return
'' wenn 800 interruptimpulse noch nicht erreicht sind motor läuft weiter
Rauf:
Portb = &B11111111
Waitms 100
Return
Config Pinb.2 = Input
Config Pinb.1 = Output
Config Portb.2 = Input
Warum Portb.2 nochmal konfigurieren?
Laut Datenblatt hat der VCC-Anschluss 5 Volt - ohne 330 Ohm, hat eigene Stromquellenschaltung.
'' Interrupt Int0 config
On Int0 Irq0
würde ich vor " Do " setzen.
Probier mal aus.
hy
so hab ma das nochmal angschaut also
@ stromi
' Interrupt Int0 config
On Int0 Irq0
steht doch eh vor do
oder muss man die flanke nicht nehmen falling/rising?
jedenfalls hab ich ma mal dacht wenn ich schon ein lcd hab, dann lass ich mal den irq0 anzeigen, gut ein paar programmzeilen eingebaut:
hängt nix & berührung mit finger zählt er hoch teilweise schon wenn ein kabel hängt.
häng ich den optokoppler ausgang dazu, bleibt er stehen und zählt nix, auch dann nicht wenn impulse kommen sollten
häng ich den widserstand von int0 gegen vcc tut sich das selbe nichts
also überhaupt keine zählung
ich denk mal es liegt an dem optokoppler, wie könnte man den am besten ohne avr testen, hab leider nur so ein mist messgerät das ströme >30ma nur schlecht anzeigt oder gar nicht, bzw beim diodentest bin ich mir auch nicht sicher
aber müsste eigentlich mit einer led am ausgang vomoptokoppler funktionieren?! led dann wieder mit47k gegen vcc??
mfg
piri
aja hier code inklusive int0 auswertung am display
Code:$regfile = "m8def.dat"
$baud = 9600
$crystal = 8000000
Config Pinb.2 = Input
Config Portb.1 = Output
'LCD-Ausgabe
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcd = 16 * 2
'' Interrupt Int0 config
Config Int0 = rising
On Int0 Irq0
Enable Interrupts
Enable Int0
Dim Irq0 As Word
Do
Cls
Cursor Off
Lcd Irq0
''abfrage ob taste gedrückt & Kontrolle ob irq0 noch nicht über 800
Abfrage:
If Pinb.2 = 0 Then
Gosub Rauf
End If
Waitms 100
If Irq0 > 250 Then
Gosub Halt
Else
End If
Loop
'' bei Int0 wird irq0 um 1 erhöht
Irq0:
Incr Irq0
Return
'' wenn 800 impulse ereicht dann motor stopp
Halt:
Irq0 = 0
Portb = &B00000000
Waitms 100
Return
'' wenn 800 interruptimpulse noch nicht erreicht sind motor läuft weiter
Rauf:
Portb = &B11111111
Waitms 100
Return
Kann es sein dass du verschiedene Betriebsspannungen hast, oder nicht die gleiche Masse?
Verdrahtung:
Von 5Volt=Vcc-->[=4,7k=]-->Collektor_Lichtschranke ; Emitter an Masse.
Der Anschluß Collektor_Lichtschranke ist der IRQ-Anschluß, Emitter ist auch an der Controller-Masse.
Program:
On Int0 Irq0
habe ich "nach der Interuptfreigabe schreiben" gemeint.
Dein IRQ ist bei der Subroutine Halt zu 0 gemacht, dann wird aber ein neuer Durchlauf gemacht, dabei wird festgestellt, dass IRQ< 800 ist also: Motor wieder an. Wirst du nicht wollen :-)
Bei dem Unterprogram Halt muss dann dein Motor dauerhaft aus bleiben, oder der Motor dreht dann um, oder oder anders....
Ich würde auch nicht so etwas schreiben
Config Pinb.2 = Input
Config Portb.1 = Output
entweder die Methode oder eine andere, aber dann dabei bleiben, nicht mischen:
bei Config Pind.1=..... verwende ich Set oder Reset Pind.1, nicht mit binären Zuweisungen von ganzen Ports
das "mischen" ist einfach zu Fehlerbehaftet.
Aber ich bin auch kein Profi...nur Bastler.
ok bin jetzt 2 abende gesessen und hab gemessen und mich im web auf diversen seiten informiert.
aber irgendwie find ich auf meine anomalie keine lösung.
diese beschriebene gabellichtschranke arbeitet irgenwie ganz komisch!!!!!
hängt auf vcc und gnd//
+5v am ausgang
wenn man jetzt zwischen die scheiben was durchschiebt ändert sich nix
+v5 am ausgang
verdunkel ich aber die umgebung oder schließ die gabellichtschranke in eine box is am ausgang fast
0V?! am ausgang
wie is das möglich, falsch beschlaten?! vout & vcc vertauscht?! ?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!
Laut deinem geposteten Datenblatt gibt es zwei Anschlussmöglichkeiten:
GP1A73A hat an 1 Gnd 2 Vout 3 VCC
GP1A73A1 hat an 1 Vcc 2 Vout 3 Gnd
Haste das kontrollettie?
hy danke für die schnelle info.
aber das mit den licht hat mich so verunsichert das ich im web nochmal nach datenblätter gsucht hab. und siehe da es gibt auf eine gp1s73 http://www.ortodoxism.ro/datasheets/Sharp/mXvtxwx.pdf und die verändert natürlich alles.
es funktioniert!!! ;-)
jedenfalls der timer zählt jetzt nur wenn der motor läuft! (also lichtschranke arbeitret)
muss glaub ich noch das programm ein bisschen verbessern, es wird teilwiese der ausgang gesetzt ohne den taser gedrückt zu haben, komische sache, werd mal ne doppelte tastenabfrage einbaun (störsicherheit)
sowie die abfrage für taste runter fehlt auch noch
werd mich bei weiteren erfolg wieder bei euch melden und posten wie es weitergangen is!
;-)
danke @ll für die hilfe!
mfg
piri