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 | ||
| ||
> 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) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum