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