Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

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
Ich nutze:
C-Control Pro Mega32, CC-Pro 32 Application Board
> 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)