Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

Fragen zur Software

Basteleien analog und digital mit Strom und Spannung.

Moderator: radioscout

Benutzeravatar
Windi
Geoguru
Beiträge: 6338
Registriert: Fr 16. Jan 2004, 23:57
Kontaktdaten:

Re: Fragen zur Software

Beitrag von Windi »

stonewood hat geschrieben:... daher sollte man den auch nur anfassen wenn man genau weiß was man da tut.
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.
Bild
nhedgehog
Geocacher
Beiträge: 39
Registriert: So 24. Okt 2010, 22:22

Re: Fragen zur Software

Beitrag von nhedgehog »

Windi hat geschrieben:
stonewood hat geschrieben:... daher sollte man den auch nur anfassen wenn man genau weiß was man da tut.
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.
Nu denn, Thanks für die aufmunternden und ehrlichen Worte. Fühl ich mich nicht mehr ganz so volldeppig!
Benutzeravatar
upigors
Geowizard
Beiträge: 2359
Registriert: Mo 24. Sep 2007, 15:52
Wohnort: 39326 Hohenwarsleben
Kontaktdaten:

Re: Fragen zur Software

Beitrag von upigors »

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 :roll:
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
Wenn mich hier jemand mal aufklären könnte wäre mir sehr geholfen. Wie gesagt, Ausgänge ist klar aber der Rest...???
Bild..Bild..[
Benutzeravatar
Kappler
Geowizard
Beiträge: 1440
Registriert: So 31. Dez 2006, 16:51
Wohnort: 77876 Kappelrodeck

Re: Fragen zur Software

Beitrag von Kappler »

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:

Code: Alles auswählen

Config Portb = &B00000111 'Pinb.0-2 auf 'Ausgang', Rest auf 'Eingang' schalten
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:

Code: Alles auswählen

Portb = &B11111000
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

Code: Alles auswählen

Portb = 0
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:

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
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...
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
Benutzeravatar
upigors
Geowizard
Beiträge: 2359
Registriert: Mo 24. Sep 2007, 15:52
Wohnort: 39326 Hohenwarsleben
Kontaktdaten:

Re: Fragen zur Software

Beitrag von upigors »

Kappler hat geschrieben: Zunächst mal zur Ein-/Ausgangsdeklaration:

Code: Alles auswählen

Config Portb = &B00000111 'Pinb.0-2 auf 'Ausgang', Rest auf 'Eingang' schalten
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...
nicht umgekehrt? in der Schaltung zum Code sind B0-B2 Ausgänge eben wie es auch im Code steht :???:
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?
Bild..Bild..[
Benutzeravatar
upigors
Geowizard
Beiträge: 2359
Registriert: Mo 24. Sep 2007, 15:52
Wohnort: 39326 Hohenwarsleben
Kontaktdaten:

Re: Fragen zur Software

Beitrag von upigors »

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?

Code: Alles auswählen

Config Portb = &B00000111            'Pinb.0-2 auf 'Ausgang, Rest auf 'Eingang' schalten
Portb = &B11111000
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

Portb = 0
Bild..Bild..[
Benutzeravatar
Kappler
Geowizard
Beiträge: 1440
Registriert: So 31. Dez 2006, 16:51
Wohnort: 77876 Kappelrodeck

Re: Fragen zur Software

Beitrag von Kappler »

upigors hat geschrieben:nicht umgekehrt? in der Schaltung zum Code sind B0-B2 Ausgänge eben wie es auch im Code steht :???:
Stimmt natürlich, ich habe es oben mal geändert...
upigors hat geschrieben:Und wiesso funktioniert meine Schaltung mit eben diesem code wenn die pullups nicht gesetzt sind?
Deine Schaltung funktioniert, weil du überhaupt keinen (digitalen) Eingang benutzt ;) .
Mit

Code: Alles auswählen

Ldr = Getadc(2)
fragst du einen analogen Eingang ab, der je nach angelegter Spannung einen beliebigen Wert zwischen 0 und 1023 (bei 10 Bit Auflösung) annimmt.

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
Benutzeravatar
upigors
Geowizard
Beiträge: 2359
Registriert: Mo 24. Sep 2007, 15:52
Wohnort: 39326 Hohenwarsleben
Kontaktdaten:

Re: Fragen zur Software

Beitrag von upigors »

ok, verstanden.
Den Code (

Code: Alles auswählen

Portb = 0
) 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... :gott:
Bild..Bild..[
Benutzeravatar
Kappler
Geowizard
Beiträge: 1440
Registriert: So 31. Dez 2006, 16:51
Wohnort: 77876 Kappelrodeck

Re: Fragen zur Software

Beitrag von Kappler »

Jetzt bin ich etwas verwirrt :???:

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
Benutzeravatar
upigors
Geowizard
Beiträge: 2359
Registriert: Mo 24. Sep 2007, 15:52
Wohnort: 39326 Hohenwarsleben
Kontaktdaten:

Re: Fragen zur Software

Beitrag von upigors »

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 ;)
Bild..Bild..[
Antworten