Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Pullup / Pulldown Kategorie: Programmierung C (von Montelucon - 11.06.2009 2:25)
Als Antwort auf Re: Pullup / Pulldown von Endress - 10.06.2009 15:05

> > > > Hallo Endress,
> > > >
> > > > also ganz grundsätzlich kannst Du auch den internen PullUp aktivieren.
> > > > Bei manchen Anwendungen ist das jedoch nicht so gut, z.B. bei einem Inkrementalgeber.
> > > > Da solltest Du einen externen PullUp verwenden und den internen abschalten.
> > > >
> > > > So jetzt aber zu deinem Fehler.
> > > > Die Anweisung "Port_DataDir" setzt den GESAMT Port auf Ein- oder Ausgang.
> > > > Hier kann Du nicht den PortPin angeben! (Das machst Du).
> > > >
> > > > Die richtige Anweisung (in deinem Fall) wäre "Port_DataDirBit".
> > > > Hier wird nur EIN PortPin angesprochen.
> > > >
> > > > Ein Beispiel mit internen PullUp, bei dem EIN Portpin auf Eingang gesetzt wird.
> > > > Code nicht geprüft, da ich normalerweise in Basic programmiere.
> > > >
> > > > void main(void)
> > > > {
> > > >    
> > > >    Port_DataDirBit(16,0);   // PortPin 16 (C.0) auf Eingang
> > > >    Port_WriteBit(16,1);      // PullUp C.0 an
> > > >
> > > >    int test;                       // Variable zum cachen der Werte
> > > >
> > > >    while(true)
> > > >    {
> > > >          test = Port_ReadBit(PortC0);   // Port einlesen
> > > >          
> > > >          Msg_WriteInt(test);                 // Wert im Debugger im IDE Fenster ausgeben
> > > >          Msg_WriteChar(13);                // Zeilenumbruch
> > > >    }
> > > >
> > > > }
> > > >
> > > >
> > > > GruÃ?
> > > >
> > > > Monte
> > > >
> > > > > > Hallo,
> > > > > >
> > > > > > ich versuche Port C 0 mittels eines Relais auszuwerten.
> > > > > > Nun habe ich schon etwas über die Pullup/Down Widerstände gelesen, aber das bringt mich nicht wirklich
> > > > > > weiter. Nur wenn ich den Port über einen 10K Widerstand auf GND ziehe, steht das Ding auf Null, floatet
> > > > > > aber sonst immer vor sich hin, auch wenn ich 5 Volt anlege.
> > > > > >
> > > > > > Was mach ich falsch ?
> > > > > >
> > > > > > Source:
> > > > > >
> > > > > >
> > > > > > #define PortC0 16
> > > > > > #define PortA0 0
> > > > > >
> > > > > > char zeile1[8];
> > > > > >
> > > > > > void main(void)
> > > > > > {
> > > > > >     LCD_Init();
> > > > > >     LCD_ClearLCD();
> > > > > >
> > > > > >     Port_DataDir(PortC0,0);
> > > > > >     ADC_Set(ADC_VREF_VCC,0);
> > > > > >
> > > > > >     Port_WriteBit(16,1);
> > > > > >
> > > > > >     while(true)
> > > > > >     {
> > > > > >         if(Port_ReadBit(PortC0)==1)
> > > > > >         {
> > > > > >             zeile1="1";
> > > > > >         }
> > > > > >         if(Port_ReadBit(PortC0)==0)
> > > > > >         {
> > > > > >             zeile1="0";
> > > > > >         }
> > > > > >         LCD_Ausgabe();
> > > > > >     }
> > > > > > }
> > > > > >
> > > > > > void LCD_Ausgabe(void)
> > > > > > {
> > > > > >     LCD_CursorPos(0x00);
> > > > > >     LCD_WriteText(zeile1);
> > > > > > }
> > > > > >
> > > > > >
> > > > > > Danke und Gruss, Endress
> > > > >
> > > > > Zusatzfrage: Ich hole die 5 V über VREF vom Port A0 ist das am Ende ein Problem ?
> > > > > Oder gibt es grundsätzlich einen Pin der die 5 Volt liefert auf dem Board ?
> > >
> > > Hallo Monte,
> > >
> > > vielen Dank für die Antwort, ich hab zu Testzwecken den gesamten PortC auf Input gesetzt.
> > >
> > > Ich habe es vorhin nochmal getestet und es funktioniert jetzt folgendermassen :
> > >
> > > Bei aktiviertem internen Pullup ist der Port High im Ruhezustand.
> > > Zieh ich ihn auf GND geht er auf LOW. ( ich kann ihn doch direkt auf GND ziehen ? )
> > > Ist das so korrekt ?
> > >
> > > Externer Pullup sähe so aus :
> > >
> > > 10 K Widerstand vom Port direkt auf GND.
> > > 5 V beim Schaltvorgang auch direkt auf den Port ?
> > >
> > > Gibt es auf dem Applicationboard PINs für GND ? Ich find in der gesamten Portbelegung irgendwie nichts.
> > >
> > > Danke und Gruss, Endress
> >  Hallo Endress,
> >
> > wenn du das App.Board so vor dich legst, das die USB-Buchse links ist,
> > dann ist die oberste Reihe auf dem Lötfeld +5V und die unterste Reihe GND.
> >
> > GruÃ?
> > GEMINI1606
>
> Vielen Dank !! Es hat soweit funktioniert. Ich hab jetzt die anderen Ports C auch alle auf Eingang gestellt
> und den Pullup eingeschaltet. Komischerweise hab ich jetzt wieder das Problem, dass die Eingänge
> floaten.
>
> Macht es einen Unterschied, ob ich für den gesamten Port C mittels
> "Port_Write(2,1);" die Pullups setze oder muss ich das einzeln machen ?
>
> Ich habs jetzt versucht, in dem ich den gesamten Port auf Eingang setze und Pullups siehe oben.
>
> Gruss, Endress


Hallo Endress,

ich wei� nicht, ob Du da nur einen Schreibfehler machst oder ob Du es tatsächlich so angeschlossen hast.
Pullup hei�t "nach oben". Du musst also den Port über den 10K an 5V legen, nicht an GND.
An GND wäre dann ein Pulldown.

Eigentlich sollte es keinen Unterschied machen, ob die den gesamten Port auf Eingang legst oder nur
den Portpin. Ich selber habe das noch nie so gemacht.

Wie floaten denn die Eingänge? Bewegen die sich langsam von 5V Richtung GND oder schwanken die hin
und her? Wenn Die schwanken, dann habe ich das Gefühl, dass Du eine externen Pulldown verwendest und
den internen Pullup angeschaltet hast.

Wenn Du einen externen Pullup/-down verwendest, musst Du den internen abschalten.
Bei mir war das so, dass ohne den Abschaltbefehl der interne Pullup bei manchen Ports aktiviert war.
Lag wohl am Auslieferzustand der C-Control.

GruÃ?

Monte


    Antwort schreiben


Antworten:

Re: Pullup / Pulldown (von Endress - 15.06.2009 10:12)
    Re: Pullup / Pulldown (von Montelucon - 15.06.2009 23:44)