- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 6 von 6

Thema: pull up wiederstaende aktivieren ?!?!?!

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    28.08.2004
    Ort
    Giessen
    Beiträge
    10

    pull up wiederstaende aktivieren ?!?!?!

    Anzeige

    Powerstation Test
    Hallo,

    ich bin recht neu dabei und verstehe nicht warum ich keine internen pull up Wiederstaede aktivieren kann. Ich habe 2 Programme geschieben eins in C und das andere in Basic. Meines Erachtens gleichen sie sich, aber sie tuen nicht dasselbe.

    Ziel:
    portb pin0 = ausgang (LED) (HIGH = AN)
    portb pin1 = eingang (Schalter) (HIGH = Schalter - offen)

    Mein Basic Programm funktioniert (LED flakert nicht, pull up aktiv),
    alles wunderbar.

    Code:
    Ddrb = &B00000001
    Portb = &B00000010
    
    Do
      If Pinb.1 = 0 Then
        Portb.0 = 1
      Else
        Portb.0 = 0
      End If
    Loop
    End
    Aber mein C Programm aktiviert sie einfach nicht!

    Code:
    #include <avr/io.h>
    int main (void) {
      DDRB = 0x01;
      PORTB = 0x02;                           // GEHT NET =(
    
      while (1) {
        if ( (PINB & 0x02) == 0x00 )
           PORTB = 0x01;
        else
           PORTB = 0x00;
       }
    }
    Kann sich das einer erklaeren? Ich nicht!
    Uebrigens ist das Basic Programm auf XP uebersetzt worden (Bascom), wobei ich C unter Linux benutze (avr-gcc, avrdude).

    Danke im Voraus.

    mfg
    martin

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Hi, schau mal, wie PINB definiert ist, da hat's wahrscheinlich was.
    Probier einfach was anderes:
    if (PORTB & 0x02) // is im PortB das Bit 2^^1 gesetzt ?
    PORTB = 0x00; // ja --> ganzes port auf Null
    else PORTB = 0x01; // nö --- > ganzes port auf 1

    mfg

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    28.08.2004
    Ort
    Giessen
    Beiträge
    10
    Das waere ja nur umgekehrte Logik. Funktioniert ebenso nicht =(,
    aber danke fuer die Antwort.

    Ich glaube der hacken ist hier: PORTB = 0x02;
    diese Zeile aktiviert doch den internen pull up Wiederstand, wenn ich das alles richtig verstanden habe. Damit der Pin (hier der 2te) keine undefinierten Pegel bekommt.
    Wenn ich ein 10 kOhm Wiederstand zwischen + und den 2ten Pin lege, funktioniert alles wie es soll, das waere jetzt ein externen oder nicht und wenn es so ware sollte man den internen ausschalten, hab ich gelesen. Also nicht beide zur selben Zeit benutzen.

    Daraus folgere ich jetzt mal frech , dass der obrige code richtig ist, oder irre ich mich?

    mfg
    martin

  4. #4
    Gast
    Hallo

    Code:
     while (1) {
        if ( (PINB & 0x02) == 0x00 )
           PORTB = 0x01;           Hier wid der Pullup doch wieder ausgeschaltet
        else
           PORTB = 0x00;          und hier auch
       }
    }
    Bei Bascom schreibst du den Port ja mit Bitzugriffen, in C schreibst du den ganzen Port neu.

    MFG
    Dieter

  5. #5

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    28.08.2004
    Ort
    Giessen
    Beiträge
    10
    Achso, ups, habs jetzt endlich verstanden, =).
    Funktioniert jetzt alles wie es soll, werde mich jetzt an eine delay funktion machen.

    Vielen dank fuer eure Beitraege.

    mfg
    martin

Berechtigungen

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

Solar Speicher und Akkus Tests