Ich glaube das Lehrgeld haben in der Experimentierphase schon einige von uns zahlen müssen. Ich schließe mich da nicht aus. Wer rechnet denn auch schon damit dass man den Chip danach nicht mehr normal ansprechen kann.stonewood hat geschrieben:... daher sollte man den auch nur anfassen wenn man genau weiß was man da tut.
Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.
Fragen zur Software
Moderator: radioscout
Re: Fragen zur Software
Re: Fragen zur Software
Nu denn, Thanks für die aufmunternden und ehrlichen Worte. Fühl ich mich nicht mehr ganz so volldeppig!Windi hat geschrieben:Ich glaube das Lehrgeld haben in der Experimentierphase schon einige von uns zahlen müssen. Ich schließe mich da nicht aus. Wer rechnet denn auch schon damit dass man den Chip danach nicht mehr normal ansprechen kann.stonewood hat geschrieben:... daher sollte man den auch nur anfassen wenn man genau weiß was man da tut.
- upigors
- Geowizard
- Beiträge: 2359
- Registriert: Mo 24. Sep 2007, 15:52
- Wohnort: 39326 Hohenwarsleben
- Kontaktdaten:
Re: Fragen zur Software
Hallo, ich wende mich mal mit einer frage an die Community die einigen sicher banal vorkommen wird aber ich komm an dieser stelle einfach nicht weiter. Für diverse Bastelein benutze ich im Prinzip immernoch den Code aus dem ursprünglichen reaktivlicht oder zum Mindestens Teile davon. Der basiert ja darauf das ich gleich am Anfang die Ports verteile also hier B0-2 und A0+1auf out, Rest auf in. Letztendlich habee ich aber nur einen Eingang bzw. nutze nur einen. Nun kann ich nicht erkennen wie das Ganze aufgebaut sein müsste wenn ich mehrere Eingänge brauch. Ich kann an keiner Stelle erkennen wo gesagt wird wenn Eingang Nr. 1 den und den Wert hat dann mach das und das sondern nur wenn Eingang den und den wert hat mach das und das. Mir fehlt hier an dieser Stelle das Verständniss wo das definitiv gemacht wird. Bei den Ausgängen ist das logisch aber im Eingang...??? Lässt sich jetzt doof beschreiben irgendwie aber vielleicht verstehts ja doch einer und kann mir das mal erklären.
Ich möchte also um das zu vereinfachen erreichen das wenn Eingang Nr.1 ne Spannung anliegt passiert dieses, liegt an Eingang Nr. 2 Spannung an dann passiert jenes.
Ich vermute das das hier: "Dim Ldr As Integer" passiert aber da steht ja nichts was genau den einen eingang definiert....
Hier der betreffende Auszug des Codes den ich verwende, sollte den meisten ja bekannt vorkommen
Ich möchte also um das zu vereinfachen erreichen das wenn Eingang Nr.1 ne Spannung anliegt passiert dieses, liegt an Eingang Nr. 2 Spannung an dann passiert jenes.
Ich vermute das das hier: "Dim Ldr As Integer" passiert aber da steht ja nichts was genau den einen eingang definiert....
Hier der betreffende Auszug des Codes den ich verwende, sollte den meisten ja bekannt vorkommen

Wenn mich hier jemand mal aufklären könnte wäre mir sehr geholfen. Wie gesagt, Ausgänge ist klar aber der Rest...???Config Adc = Single , Prescaler = Auto
Config Portb = &B00000111 'Pinb.0-2 auf 'Ausgang', Rest auf 'Eingang' schalten
Config Porta = &B00000011 'Pina.0+1 auf 'Ausgang', Rest auf 'Eingang' schalten
Portb = 0
Porta = 0
Stop Ac 'Analog-Komparator abschalten, um Strom zu sparen
Wdtcsr = &B11010011
Enable Interrupts 'Interrupts freigeben
Const Schwelle = 150
Const Tagschwelle = 800
Dim A As Byte 'Variablen definieren
Dim Tagzaehler As Byte
Dim Schlafzaehler As Byte
Dim Ldr As Integer '0 = Dunkel, 1023 = Hell
Dim Alt As Integer
Dim Merker As Integer
Dim Zeichen As String * 1
Do
Reset Watchdog
Powerdown
Start Adc
Ldr = Getadc(2)
Stop Adc
If Ldr > 900 Then
Gosub Morsen
End If
Loop
Re: Fragen zur Software
Das kommt zunächst mal darauf an, wie der Eingang beschaltet sein soll.
Ich gehe mal vom einfachsten Fall aus, dass der Eingang über einen Taster nach GNG geschaltet wird.
Sinnvollerweise verwendet man dann am Eingang einen sogenannten Pullup-Widerstand (z.B. 10k) gegen +Ub, der den Eingang bei nicht betätigtem Taster definiert auf Hi-Pegel zieht.
Praktischerweise haben die Atmels so einen Widerstand schon eingebaut, der aber per Software eingeschaltet werden muss.
Zunächst mal zur Ein-/Ausgangsdeklaration:
Hier bedeutet eine "1" im Bitmuster, dass der korrespondierende Port ein Ausgang werden soll, eine "0" bedeutet, dass der Port als Eingang fungiert. Hier also die B.2 bis B.0 als Ausgang...
Als nächstes solltest du die Pullup-Widerstände für deine Eingänge zuschalten. Das machst du mit dem Port-Befehl:
würde, passend zu der obigen Ein-/Ausgangsdeklaration, die Pullups für die Eingänge B.7 bis B.3 zuschalten (eine "1" im Bitmuster an der entsprechenden Stelle).
Die Nullen an den anderen Stellen schalten hier die entsprechenden Ausgänge initialisiert aus.
In deinem Programm benutzt du keine Pullup-Widerstände, hier schreibst du
was bedeutet, dass die Ausgänge ausgeschaltet und die Pullup-Widerstände der Eingänge nicht aktiviert sind.
Einen Eingang abfragen tust du mit dem Pin-Befehl, beispielsweise:
Hier wird nichts anderes getan, als den Eingang B.3 abzufragen und je nach Eingangssignal den Ausgang B.0 entweder ein- oder auszuschalten...
Mehr ist gar nicht erforderlich...
Ich gehe mal vom einfachsten Fall aus, dass der Eingang über einen Taster nach GNG geschaltet wird.
Sinnvollerweise verwendet man dann am Eingang einen sogenannten Pullup-Widerstand (z.B. 10k) gegen +Ub, der den Eingang bei nicht betätigtem Taster definiert auf Hi-Pegel zieht.
Praktischerweise haben die Atmels so einen Widerstand schon eingebaut, der aber per Software eingeschaltet werden muss.
Zunächst mal zur Ein-/Ausgangsdeklaration:
Code: Alles auswählen
Config Portb = &B00000111 'Pinb.0-2 auf 'Ausgang', Rest auf 'Eingang' schalten
Als nächstes solltest du die Pullup-Widerstände für deine Eingänge zuschalten. Das machst du mit dem Port-Befehl:
Code: Alles auswählen
Portb = &B11111000
Die Nullen an den anderen Stellen schalten hier die entsprechenden Ausgänge initialisiert aus.
In deinem Programm benutzt du keine Pullup-Widerstände, hier schreibst du
Code: Alles auswählen
Portb = 0
Einen Eingang abfragen tust du mit dem Pin-Befehl, beispielsweise:
Code: Alles auswählen
If Pinb.3 = 1 Then
Portb.0 = 1 'Pin wird auf High, also 5V geschaltet (Taster nicht betätigt)
Else
Portb.0 = 0 'Pin wird auf Low, also 0V geschaltet (Taster betätigt, also Eingang auf GND)
End If
Mehr ist gar nicht erforderlich...
Zuletzt geändert von Kappler am Di 16. Nov 2010, 14:29, insgesamt 1-mal geändert.
Gruß aus dem (badischen) Schwarzwald, Andreas (1/4 Kappler)
Bekennender Fremdlogleser und Rosinenpicker
Bekennender Fremdlogleser und Rosinenpicker
- upigors
- Geowizard
- Beiträge: 2359
- Registriert: Mo 24. Sep 2007, 15:52
- Wohnort: 39326 Hohenwarsleben
- Kontaktdaten:
Re: Fragen zur Software
nicht umgekehrt? in der Schaltung zum Code sind B0-B2 Ausgänge eben wie es auch im Code stehtKappler hat geschrieben: Zunächst mal zur Ein-/Ausgangsdeklaration:Hier bedeutet eine "0" im Bitmuster, dass der korrespondierende Port ein Ausgang werden soll, eine "1" bedeutet, dass der Port als Eingang fungiert. Hier also die B.2 bis B.0 als Eingang...Code: Alles auswählen
Config Portb = &B00000111 'Pinb.0-2 auf 'Ausgang', Rest auf 'Eingang' schalten

Ich versuch mich jetzt mal langsam da durch zu arbeiten aber das ist jetzt erstmal ne Grundsatzfrage

Und wiesso funktioniert meine Schaltung mit eben diesem code wenn die pullups nicht gesetzt sind?
- upigors
- Geowizard
- Beiträge: 2359
- Registriert: Mo 24. Sep 2007, 15:52
- Wohnort: 39326 Hohenwarsleben
- Kontaktdaten:
Re: Fragen zur Software
also mal angenommen du hast oben nen Schreibfehler und es ist doch so das 1 im config portb bedeutet das es ein Ausgang ist, sollte das mit komplett gesetzten Pullups dann so aussehen?
Wären dann damit Portb 3-7 "fertige" Eingänge die ich mit "if" / "then" abfragen kann?
Und warum läuft es auch wenn der Pullup in meinem Code nicht gesetzt ist?
Code: Alles auswählen
Config Portb = &B00000111 'Pinb.0-2 auf 'Ausgang, Rest auf 'Eingang' schalten
Portb = &B11111000
Und warum läuft es auch wenn der Pullup in meinem Code nicht gesetzt ist?
Code: Alles auswählen
Portb = 0
Re: Fragen zur Software
Stimmt natürlich, ich habe es oben mal geändert...upigors hat geschrieben:nicht umgekehrt? in der Schaltung zum Code sind B0-B2 Ausgänge eben wie es auch im Code steht![]()
Deine Schaltung funktioniert, weil du überhaupt keinen (digitalen) Eingang benutztupigors hat geschrieben:Und wiesso funktioniert meine Schaltung mit eben diesem code wenn die pullups nicht gesetzt sind?

Mit
Code: Alles auswählen
Ldr = Getadc(2)
Ausserdem kann auch ein digitaler Eingang ohne Pullups funktionieren, es kann aber auch sein, dass falsch ausgelesen wird, da kein eindeutiger Pegel anliegt. Der korrekte Weg führt immer über Pullup- (gegen +Ub) oder Pulldown- (gegen GND) Widerstände. Und da Pullup-Widerstände im Atmel bereits eingebaut sind, bietet es sich einfach an, diese zu benutzen und die Eingänge gegen GND zu schalten...
Gruß aus dem (badischen) Schwarzwald, Andreas (1/4 Kappler)
Bekennender Fremdlogleser und Rosinenpicker
Bekennender Fremdlogleser und Rosinenpicker
- upigors
- Geowizard
- Beiträge: 2359
- Registriert: Mo 24. Sep 2007, 15:52
- Wohnort: 39326 Hohenwarsleben
- Kontaktdaten:
Re: Fragen zur Software
ok, verstanden.
Den Code () hab ich ja aus dem Kochbuch (Blinker mit LDR) und nachträglich nur geändert um einen anlogen Eingang zu bekommen also statt dem LDR nen Taster etc nehmen zu können.
Mein Ziel ist jetzt 2 taster zu verwenden also kann ich auf die Pullup's verzichten, Richtig?
Wenn ich das jetzt soweit richtig verstehe kann ich o.g. Code so lassen, ich habe bereits ausser b0-2 alle auf Eingng gesetzt und brauch jetzt nur noch weitere Taster an b 3-... zu bauen? Werden die so wie der Code jetzt ist auch schon (analog) abgefragt
oder noch präziser: b0-2 sind Ausgänge, b3-4 sollen Eingänge sein. Ich schalte im Übrigen ACC also + auf die Eingänge, eben wie im Kochbuch.
P.S. Danke für deine Geduld...
Den Code (
Code: Alles auswählen
Portb = 0
Mein Ziel ist jetzt 2 taster zu verwenden also kann ich auf die Pullup's verzichten, Richtig?
Wenn ich das jetzt soweit richtig verstehe kann ich o.g. Code so lassen, ich habe bereits ausser b0-2 alle auf Eingng gesetzt und brauch jetzt nur noch weitere Taster an b 3-... zu bauen? Werden die so wie der Code jetzt ist auch schon (analog) abgefragt
oder noch präziser: b0-2 sind Ausgänge, b3-4 sollen Eingänge sein. Ich schalte im Übrigen ACC also + auf die Eingänge, eben wie im Kochbuch.
P.S. Danke für deine Geduld...

Re: Fragen zur Software
Jetzt bin ich etwas verwirrt
Willst du die Taster analog abfragen oder digital?
Und falls analog, warum???

Willst du die Taster analog abfragen oder digital?
Und falls analog, warum???
Gruß aus dem (badischen) Schwarzwald, Andreas (1/4 Kappler)
Bekennender Fremdlogleser und Rosinenpicker
Bekennender Fremdlogleser und Rosinenpicker
- upigors
- Geowizard
- Beiträge: 2359
- Registriert: Mo 24. Sep 2007, 15:52
- Wohnort: 39326 Hohenwarsleben
- Kontaktdaten:
Re: Fragen zur Software
im Prinzip ist mir die Art der Abfrage egal, mit der analogen, also so wie es jetzt ist (siehe ursprünglicher Code im ersten Posting), klappt es bestens. Ich hab natürlich kein Problem damit das digital zu machen aber warum wenn es ja so gut funktioniert und ich das quasi nur auf einen oder vllt. zwei zusätzliche(n) Eingang erweitern möchte.
Also kurz: egal ob digital oder analog, funktionieren muss es
Also kurz: egal ob digital oder analog, funktionieren muss es
