Re: Probleme mit Ein- und Ausgängen Kategorie: Programmierung C (von Bernd der Alte - 27.03.2006 12:11) | ||
Als Antwort auf Re: Probleme mit Ein- und Ausgängen von Reiner S. - 25.03.2006 9:30 | ||
| ||
> Zwei Dinge sind bei diesem Programm zu beachten. > 1. Da die Ports A und C standardmĂ€Ăig mit dem SRAM verbunden sind, > muss man dieses erst ĂŒber Jumper JP7 deaktivieren. Erst dann können > die Ports entsprechend benutzt werden. > 2. Es mĂŒssen die richtigen Ports als Eingang und Ausgang deklariert werden. Hallo Mario Hallo Ihr alle! Ich stand vor Wochen bei einem Ă€hnlichen Problem. Brauchte EingĂ€nge fĂŒr Tasten und AusgĂ€nge zur Ansteuerung von Ereignissen. Und keine ausreichenden Ports. Habe zwar den Mega32 aber das prinziep ist das gleiche. Gelöst habe ich das Problem durch den Einsatz entsprechender I2C Bausteine. Der I2C Bus funktioniert Fehlerfrei und selbst das Auslesen eines Drehgebers macht keine Probleme. Ăber die AusgĂ€nge steuere ich sogar einen altmodischen Datenbus mit Schreib- und Leseimpuls an. Eine Leseroutine fragt stĂ€ndig die EingĂ€nge ab, ĂŒbernimmt die Tastenentprellung und ĂŒbergibt gĂŒltige Daten an die jeweils entsprechende Ausgaberoutine. Bei Tasten und Dregebern im Handbetrieb ist die Sache auch schnell genug. Wie gesagt es funktioniert. Und es wird nur der I2C Bus benötigt. FĂŒr anfallende Displayausgaben steht dann auch noch das LCD Display zur verfĂŒgung. Tip: Benutzar sind die I2C Module der C-Controlreihe. GruĂ Bernd > > void main(void) > { > Port_DataDir(2,0x00); //Port C wird als Eingang deklariert > Port_DataDir(0,0xFF); //Port A wird als Ausgang deklariert > Programm1(); > } > > GruĂ > Reiner > > > Ich plane mit Hilfe ihrer C-Control Pro Mega 128 eine Schaltung zu realisieren. ZusĂ€tzlich zum Board > > und der CPU sind wir im Besitz einer LCD-Anzeige (zur Statusanzeige, ist noch in Planung) und einem > > Tastenfeld (zur spĂ€teren Programmauswahl). > > > > Fakten zur Planung: > > > > Die C-Control soll > > -16 EingĂ€nge haben, die per Taster angesteuert werden > > -16 AusgĂ€nge zur Ansteuerung von Transistoren haben (Die beim Durchschalten eine Reihe LED's > > leuchten lassen) > > > > Programm 1: > > Ich habe mit dem Testprogramm versucht, die entsprechenden Ports auf Ein- bzw Ausgang zu > > schalten und nach BetĂ€tigung eines Tasters (bzw Ansteuerung eines Ports) einen Ausgang fĂŒr 20 > > Sekunden auf Ansteuerung zu belassen, bevor er wieder auf 0 zurĂŒckfĂ€llt. Allerdings messe ich an > > den Ports sehr komische Werte (3V, egal ob Ein- oder Ausgang, angesteuert oder nicht,oder ich > > messe dauerhaft 5V) Manchmal funktionierte es allerdings auch wie es sollte. Der Ausgang blieb bei > > ca. 0,8V, bis ich den passenden Eingang angesteuert habe. Dann stieg er auf 5,6V, blieb aber nicht > > fĂŒr die eingestelle Zeit bei AbsDelay(), sondern fiel immer schon nach ca. 2 Sekunden wieder ab. > > Habe ich einen Fehler in der Programmierung? Oder liegt es evtl am Board? > > > > Eigentlich geplant ist folgendes: > > Der Ausgang VAREL bleibt dauerhaft auf 1, bis einer der anderen 15 EingĂ€ngen angesteuert wird. Varel > > soll dann ausgehen und der dazugehöre Ausgang auf fĂŒr 20 Sekunden auf 1 bleiben, es sei denn ein > > anderer Ausgang wird wieder angesteuert. Dann soll dieser stattdessen fĂŒr 20 Sekunden bleiben. > > > > Wie wĂ€re das realisierbar? Es wĂ€re auch nett, wenn jemand eine ausfĂŒhrlichere ErklĂ€rungen fĂŒr die > > Timerfunktionen hĂ€tten, denn die aus dem Handbuch finde ich sehr mangelhaft. > > > > MfG > > Mario > > > > Programm: > > #define EVAREL 16 //Eingang von VAREL > > ... > > ... > > ...(geht so weiter bis) > > #define EFILTON 27 > > > > #define VAREL 0 //Ausgang VAREL > > ... > > ... > > ...(geht so weiter bis) > > #define FILTON 7 > > > > > > void Programm1(void) > > > > byte FVAREL; //Variable fĂŒr Funktion Varel definieren > > ... > > ... > > ...(geht so weiter bis) > > byte FFILTON; > > > > while(true) //Endlosschleife (Warten auf Ansteuerung) > > { > > while(Port_ReadBit(EVAREL)) //Wenn Eingang angesteuert wird > > { > > if (FVAREL!=1) FVAREL=1; //Setze Funktion Varel auf 1 > > else break; > > } > > > > while(FVAREL) //beginne mit Ansteuerung des Ausgangs > > { > > Port_WriteBit(VAREL,ON); //Setze Ansteuerung auf 1 > > AbsDelay(WARTEZEIT); //Die Ansteuerung 20s auf 1 belassen > > Port_WriteBit(VAREL,OFF); //Setze Ansteuerung auf 0 > > if (FVAREL==1) FVAREL=0; //beende Funktion Varel > > } > > } > > } > > > > void main(void) > > { > > Port_DataDir(EINGANGSR1,PORT_IN); //Ein- und AusgĂ€nge definieren. > > Port_DataDir(AUSGANGSR1,PORT_OUT); > > Port_DataDir(EINGANGSR2,PORT_IN); > > > > Programm1(); //Auswahl(soll evtl durch ein zweites Programm erweitert werden) > > } > > > > > > > > > > Ich muss zugeben ich hab nich sooo den Plan davon.Sorry schonmal ^^ > > | ||
Antwort schreiben Antworten: ![]() ![]() |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum