- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 45

Thema: AT90S2343: LED als Blinklicht und Lichtsensor

  1. #11
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Anzeige

    Praxistest und DIY Projekte
    Zitat Zitat von Radio Eriwan
    Ich vermute mal, daß das vorherige Setzen des Ausganges auf '1' das Problem ist. Beim Umschalten auf Eingang bleibt sie wohl im Register und erscheint dann als Eingangswert. Wenn ich nämlich statt einer '1' eine '0' ausgeben lasse, dann lies er die ein. Merkwürdig!
    nur mal sicherheitshalber nachgefragt: Den Input liest du über Pinx-Register ..... nicht etwa über Portx-Register?
    Disclaimer: none. Sue me.

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    07.11.2005
    Beiträge
    20
    Moin alle,

    Zitat Zitat von Gast
    Config Portb = &B00011000 'Grundzustand einstellen -> Pins als Eingänge(ausser 3,4)
    Portb = &B11100111 'Pullup-Widerstände zuschalten

    waitms 1000 = wait 1

    spart speicher und ablaufzeit.
    mfg psft
    Danke für den Tip mit 'wait' statt 'waitms'! Wieder was gelernt.

    Die eigentliche Portkonfiguration hatte ich schon ähnlich gemacht, nur daß ich erstmal alle Pullup's zugeschaltet hatte.

    Ich werde das Problem jetzt mal anders angehen, und eine LED als Sensor benutzen und eine andere als Indikator. Das sollte doch wohl hinzukriegen sein!

    Zitat Zitat von SprinterSB
    nur mal sicherheitshalber nachgefragt: Den Input liest du über Pinx-Register ..... nicht etwa über Portx-Register?
    Ja, das mache ich so. Ich hatte mir nämlich mal heftig ein Ei gelegt, als ich der Hilfe von Bascom blind vertraut hatte: Die schreiben in der Hilfe, daß der 'bitwait'-Befehl angeblich mit 'Portx.x' funktioniert, also z.B. 'Portb.7'. Das ist vollkommener Quatsch und funktioniert nicht. Richtig muß es da heißen 'Bitwait Pinb.7 , Reset' und nicht 'Bitwait Portb.7 , Reset'! Habe mir also gemerkt, daß eine Ausgabe mit 'Port' und eine Eingabe mit 'Pin' gemacht werden muß.

    Bevor ich nun weiter an der eigentlichen Lösung arbeite, werde ich mal etwas mit den Pins spielen, um das Verhalten des Atmels besser zu verstehen.

    Dank' Euch für Eure Hilfe, wenn jemand noch eine Idee oder einen Tip hat, dann immer her damit!

    Viele Grüße,

    Radio Eriwan

    P.S. oder EDIT: Ich habe gerade mal folgendes ausprobiert: Wenn ich mein Programm (Pullup's nun für Portb.3 und .4 deaktiviert) laufen lasse, und mit einer Drahtbrücke während der Messung Masse an den Eingang lege, dann gibt er mir das auch hinterher richtig aus. So weit scheint mein Programm also schon mal einigermaßen richtig zu laufen.

    Eine Frage noch zum Befehl 'Portb = &B': Mit diesem Befehl schalte ich ja (binär) die Pullup's ein oder aus. Es ist doch aber auch gleichzeitig der Befehl für eine 'normale' Portausgabe!?! Wo liegt der Unterschied zwischen 'Pullup's schalten' und 'Ausgabe'?

  3. #13
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Port auf Ausgang (DDRx=1) --> PORTx legt Potential fest
    Port auf EIngang (DDRx=0) --> PORTx kontrolliert Pullups
    Disclaimer: none. Sue me.

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    07.11.2005
    Beiträge
    20
    Danke für die Erklärung!

    So, hier nun die neusten Ergebnisse meiner Tests der Ein- bzw. Ausgänge:

    Ich habe mal eine kleine Testschaltung gebaut, bei der ich jeweils eine LED mit Vorwiderstand vom jeweiligen Pin (Pinb.3 und Pinb.4) des AT's an Masse gelegt habe. Eine LED zeigt mir den Programmschritt an, die andere den Zustand des Ein- bzw. Ausganges. Das Programm dazu befindet sich im Anhang.

    Ergebnis: Eine an einen Ausgang gesendete '1' wird im Register gespeichert (logo!), beeinflußt aber auch das Ergebnis beim Einlesen, wenn dieser Pin nun als Eingang geschaltet wird. Es scheint, als wenn beim Umschalten auf Eingang das Register nicht vollständig 'abgekoppelt' wird.

    Die entsprechende LED am auf Eingang geschalteten Pin glimmt munter so vor sich hin (Spannung mit LED Ausgang - Masse: 1,7 Volt); wenn ich sie rausnehme, habe ich volle 5 Volt.

    Setze ich den Pin als Ausgang vorher auf '0', dann bleibt diese ebenfalls erhalten, wenn ich den Pin auf Eingang schalte; die LED bleibt dunkel und das Voltmeter zeigt nahezu null Volt.

    Eine testweise gegen +Ub geschaltete LED verrät mir noch etwas anderes: Bei einem als Eingang geschalteten Pin gibt es, egal ob vorher eine '1' oder '0' auf den Ausgang gegeben wurde, keine (niederohmige) Verbindung zu Masse wie die zu +Ub.

    Damit und somit kann ich 'meine' Idee wohl vergessen! Die LED bzw. ihre Kapazität kann so nicht entladen werden...

    Viele Grüße,

    Radio Eriwan

    Code:
    '                                 '
    $regfile = "2343DEF.dat"
    $crystal = 1000000
    '
    Config Portb = &B00011000
    Portb = &B11100111
    '
    Dim A As Bit
    '
    Do
    '
    Gosub Led_1
    Portb.4 = 0
    Wait 5
    Gosub Led_2
    Portb.4 = 1
    Wait 5
    Gosub Led_3
    Config Portb.4 = Input
    A = Pinb.4
    Wait 5
    Gosub Led_4
    Config Portb.4 = Output
    Wait 5
    '
    Loop
    '
    Led_1:
    Portb.3 = 1
    Waitms 50
    Portb.3 = 0
    Return
    '
    Led_2:
    Portb.3 = 1
    Waitms 50
    Portb.3 = 0
    Waitms 50
    Portb.3 = 1
    Waitms 50
    Portb.3 = 0
    Return
    '
    Led_3:
    Portb.3 = 1
    Waitms 50
    Portb.3 = 0
    Waitms 50
    Portb.3 = 1
    Waitms 50
    Portb.3 = 0
    Waitms 50
    Portb.3 = 1
    Waitms 50
    Portb.3 = 0
    Return
    '
    Led_4:
    Portb.3 = 1
    Waitms 50
    Portb.3 = 0
    Waitms 50
    Portb.3 = 1
    Waitms 50
    Portb.3 = 0
    Waitms 50
    Portb.3 = 1
    Waitms 50
    Portb.3 = 0
    Waitms 50
    Portb.3 = 1
    Waitms 50
    Portb.3 = 0
    Return
    '
    End

  5. #15
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Daß die LED glimmt mit pullup aktiv ist doch ok, oder?

    Zitat Zitat von AVR-Manual
    When switching between tri-state ({DDxn, PORTxn} = 0b00) and output high ({DDxn,
    PORTxn} = 0b11), an intermediate state with either pull-up enabled ({DDxn, PORTxn} =
    0b01) or output low ({DDxn, PORTxn} = 0b10) must occur. Normally, the pull-up
    enabled state is fully acceptable, as a high-impedant environment will not notice the difference
    between a strong high driver and a pull-up. If this is not the case, the PUD bit in
    the SFIOR Register can be set to disable all pull-ups in all ports.

    Switching between input with pull-up and output low generates the same problem. The
    user must use either the tri-state ({DDxn, PORTxn} = 0b00) or the output high state
    ({DDxn, PORTxn} = 0b11) as an intermediate step.
    Disclaimer: none. Sue me.

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    07.11.2005
    Beiträge
    20
    Hallo Sprinter,

    vielen Dank für Deinen heißen Tip!!!

    Während Du das geschrieben hast, hatte ich im Programm zeitgleich schon ausprobiert, den Pullup nach Umschalten auf Eingang nochmals abzuschalten! Man, was für ein Zufall! Das mit den Zwischenzuständen beim Umschalten ist ja fast wie Fahren bzw. Schalten mit 'Zwischengas'...

    Ich dachte, die Pullup's am Programmanfang einmal zu aktiveren/deaktivieren reicht.

    Mal testen...

    Es grüßt...

    ...Radio Eriwan

  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    07.11.2005
    Beiträge
    20
    Hi alle,

    so, fertig, es ist geschafft!

    Ein dickes 'Danke schön!' an Dich, Sprinter!

    Meine Schaltung besteht nun aus einem AT90S2343, einem Widerstand und einer LED. Wird die LED angestrahlt, quittiert sie dies mit 10 kurzen Blinkimpulsen. Die Reichweitenmessung mußte ich nach 9 m abbrechen; länger war der Flur nicht.

    Mein Fehler (neben dem mit den Pullup's): Die Eingänge sind dermaßen hochohmig, daß meine Zeitschleife 'Entladen' einfach viel zu kurz war...

    Jetzt löppt das alles und ich freue mich einfach!

    Viele Grüße,

    Radio Eriwan

  8. #18
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Hi Eriwan,

    Glückwunsch!

    Verrätst du auch, wie du das geschaltet hast?
    Einfache die LED zwischen 2 Ports?
    Was ist das für eine LED ist es?
    Und mit welchen Zeiten muss man da rechnen?
    Disclaimer: none. Sue me.

  9. #19
    Neuer Benutzer Öfters hier
    Registriert seit
    07.11.2005
    Beiträge
    20
    Hallo Sprinter,

    klar 'verrate' ich es (ein Schaltplan sagt mehr als tausend Worte ):

    Bild hier  

    Die LED ist eine ultra-helle rote 5 mm in transparentem Gehäuse. Es funktioniert jedoch auch mit jeder (!) anderen LED (grün, gelb); am schlechtesten bzw. unempfindlichsten haben sich allerdings rote LED's in rotem Gehäuse herausgestellt.

    Zum Programm:

    - LED wird für 1 ms 'geladen' (kann ggf. noch drastisch verkürzt werden)
    - 1 ms (Entlade-)Wartezeit (diese Zeit bestimmt die Ansprechempfindlichkeit)
    - danach Abfrage, ob Eingang '0' (hell) oder '1' (dunkel)

    Das ist schon fast 'erschreckend' simpel! Wie gesagt, Reichweitenversuch mußte ich bei 9 m wegen Platzmangel abbrechen...

    Ich hoffe, das hilft Dir und anderen weiter!?

    Viele Grüße,

    Radio Eriwan

  10. #20
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Ja,
    die Ladezeit kann IMHO deutlich gesenkt werden. 1µs ist da nicht zu kurz.

    Der externe INT sollte gute Dienste zur Zeitmessung leisten in Zusammenarbeit mit einem Timer.

    Nochwas: Welche Lichtquelle verwendest du?

    Bei mir wird's leider nicht so einfach
    Mit einer LED im Multiplex-Betrieb will ich die Umgebungshelligkeit bei normalem Umgebungs- und Dämmerungslicht bestimmen. Die LED soll also quasi gleichzeitig leuchten und die Helligkeit messen, damit ich ihre Helligkeit an die Umgebungshelligkeit anpassen kann. Erschwert wird das dadurch, daß die LEDs in diffusem Gehäuse stecken (weiß-diffuse Flächen-LEDs)
    Disclaimer: none. Sue me.

Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen