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 Endress - 10.06.2009 13:27)
Als Antwort auf Re: Pullup / Pulldown von Montelucon - 10.06.2009 13:14
Ich nutze:
C-Control Pro Mega128, CC-Pro 128 Application Board, Pro-Bot128
> 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


    Antwort schreiben


Antworten:

Re: Pullup / Pulldown (von GEMINI1606 - 10.06.2009 13:35)
    Re: Pullup / Pulldown (von Endress - 10.06.2009 15:05)
        Re: Pullup / Pulldown (von Montelucon - 11.06.2009 2:25)
            Re: Pullup / Pulldown (von Endress - 15.06.2009 10:12)
                Re: Pullup / Pulldown (von Montelucon - 15.06.2009 23:44)