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 15:05)
Als Antwort auf Re: Pullup / Pulldown von GEMINI1606 - 10.06.2009 13:35
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
>  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


    Antwort schreiben


Antworten:

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)