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: Re: Probleme mit Ein- und Ausgängen (von Markus - 28.03.2006 20:36) Re: Probleme mit Ein- und Ausgängen (von Bernd der Alte - 30.03.2006 12:18) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum