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 - 15.06.2009 23:44)
Als Antwort auf Re: Pullup / Pulldown von Endress - 15.06.2009 10:12

> > > > > > 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


Hallo Endress,

kurz und bündig: JA.
Als Eingang kann an dem Port jede Spannung zwischen 0 und 5V angelegt werden.
Du kannst ihn also auch über das Relais auf GND legen.

Nur zur Sicherheit als Hinweis:
Wenn der Port als Ausgang definiert wird, geht das nicht. Das wäre dann ggf. ein Kurzschluss.

GruÃ?

Monte


    Antwort schreiben


Antworten: