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 - 15.06.2009 10:12)
Als Antwort auf Re: Pullup / Pulldown von Montelucon - 11.06.2009 2:25
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
>
>
> 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

Hallo Monte,

war ein Schreibfehler, ich meinte den internen Pullup. Ich hab die internen Pullups eingeschaltet und
nachdem ich auch die Ports richtig auf Eingang geschaltet hatte, funktionierte es auch.

Nur nochmal die Frage : Mit dem aktivierten internen Pullup kann ich den Port direkt auf GND ziehen
über mein Relais ?

Danke für die Hilfe !!

Gruss, Endress


    Antwort schreiben


Antworten:

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