Wir haben ein Problem, Wir brauchen in unserem Programm den Port D mehrfach...Einmal als Eingang und einmal als Ausgabe für das LCD Display... doch leider geht das nicht... wir haben im DigiEingang gesagt alles Eingang und gut... bei den Anaolgen Eingängen soll auf dem Display die Werte ebenfalls ausgegeben werden und an den PC geschickt werden...doch wenn ich die LCD dort include, dann meckert er beim builden(MPLAP)... ich soll es an den anfang setzen, aber dann gehen die eingänge nicht mehr... Was kann ich tun, habe den entwurf einfach mal angehangen... danke für alles... //Projekt_MAIN.c //Byte 1 = 0x00 heisst alle Programme beenden und auf neuen Befehl warten! //__CONFIG(0x3F31) //#include <Projekt_Titel für Display.h> //#include <delay.h> #include <pic.h> //#include <uart.h> //#include <Receive_4x_Hex_Codes.h> void haupt(void) { #define Byte1=ausgabe(1); #define Byte2=ausgabe(2); #define Byte3=ausgabe(3); #define Byte4=ausgabe(4); //ANFANG if(Byte1=0x10) //Digitale Ausgangskarte { TRISB=0; TRISD0=0; TRISD1=0; TRISD2=0; TRISA4=0; PORTA=0; PORTB=0; RD0=0; RD1=0; RD2=0; while (Byte1=0x10) { if(Byte2=0x90) //Relais Stufe 1 Relais 1-8 { RA4=1; //Karte Aktiv RD0=1; //Stufe 1 //DelayMS(1); PORTB=Byte3; } else if(Byte2=0x50) //Relais Stufe 2 Relais 9-18 { RA4=1; //Karte Aktiv RD1=1; //Stufe 1 //DelayMS(1); PORTB=Byte3; } if(Byte2=0x30) //Relais Stufe 3 Relais 19-24 { RA4=1; //Karte Aktiv RD2=1; //Stufe 1 //DelayMS(1); PORTB=Byte3; } } } if (Byte1=0x20) //Digital Eingang Aktiv { TRISD0=0; TRISD1=0; TRISD2=0; TRISD3=1; TRISD4=1; TRISD5=1; TRISD6=1; TRISD7=1; RD0=0; RD1=0; RD2=0; RD3=0; RD4=0; RD5=0; RD6=0; RD7=0; while ( Byte1=0x20) { while(!TXIF); TXREG=PORTD ; //ByteSent1 bitte deklarieren nach ReneSeinem Datensendewort asm("nop"); } } if(Byte1=0x40)//Analog Ausgang Aktiv { //#include Projekt_Display.h //in diese Muss hinein das die Bits abgefragt werden welcher Ausgang gerade an ist. //#include Projekt_Analog_OUTPUT_LCD_Anzeigewahl.h TRISD=0; //Freigabe Display Port D = Ausgang TRISB=0; TRISC=0; TRISE0=0; TRISE1=0; TRISE2=1; //Port RE2 = Eingang Fehler Sammelmeldung TRISA5=0; //Port RA5 = Ausgang PORTB=0; PORTC=0; RE0=0; RE1=0; RA5=1; //Port RA5 = Einschalten, Anzeige des Analog wertes auf Display, wert muss umgerechnet werden while (Byte1=0x40) { if (PORTE2==0) { ByteSent 1= 0x01; //Sammelstörung Analog OUT an PC } PORTB=Byte2; PORTC=Byte3; PORTE=Byte4;//Achtung soll nur E0 und E1 betreffen, da E2 = Alarmrückmeldung an Pic ist wenn Sammelfehler while(!TXIF); TXREG=RE2; // bitte deklarieren nach ReneSeinem Datensendewort asm("nop"); } } if(Byte1=0x80) //Analog Eingang Aktiv { //#include Projekt_Display.h //#include Projekt_Analog_INPUT_LCD_Anzeigewahl.h TRISD=0; //Port D = Ausgang ->Display Port bereit TRISA5=0; //Port RA5 = Ausgang RA5=1; //Port RA5 = Einschalten, Anzeige des Analogwertes auf Display SIEHE BEISPIEL SCHULE!!!! TRISA0=1; //RA0 Analog 1 TRISA1=1; //RA1 Analog 2 TRISA2=1; //RA2 Analog 3 TRISA3=1; //RA3 Analog 4 ADCON1=0x0B; //RA0-RA4= Analog ADCS1=0;ADCS0=1; //ohne Channel-Angabe ----- kann bleiben ergibt Takt Fosc/8 ADON=1; //Converter Eingeschaltet ----- kann bleiben while (Byte1=0x80) //Es werden alle Eingänge dauerhaft gesendet bis das Byte 1 sich ändert { while(!TXIF); TXREG=RA0; //ByteSent1 bitte deklarieren nach ReneSeinem Datensendewort asm("nop"); while(!TXIF); TXREG=RA1; //ByteSent1 bitte deklarieren nach ReneSeinem Datensendewort asm("nop"); while(!TXIF); TXREG=RA2; //ByteSent1 bitte deklarieren nach ReneSeinem Datensendewort asm("nop"); while(!TXIF); TXREG=RA3; //ByteSent1 bitte deklarieren nach ReneSeinem Datensendewort asm("nop"); } } } //ENDE
Gibt es dazu auch einen Schaltplan? Wie kann ein Port zugleich Ausgang und Eingang sein? Ach ja, solche Ausdrücke "while (Byte1=0x40){}" werden nicht funktionieren. Dreimal darfst du raten warum. Zumindest eine "Warning" sollte der Compiler bringen...
Und das #define Byte1=ausgabe(1); ist auch Unsinn. Tu dir selbst einen Gefallen und hol dir ein C-Buch und mach erst mal die ersten paar Kapitel mit einem PC-Compiler durch. Ohne ein Wort Spanisch zu können, kann man in Deutschland vielleicht nach Argentienien auswandern, aber bei der Computer Programmierung reisst man ohne wenigstens Grundkentnisse der Programmiersprache nix. Und bei dem was man da so sieht, fehlt es hinten und vorne an Grundkentnissen.
Mh ... raten bin ich schlecht, höchstens, weil da kein == steht??? bin echt ratlos... Und schaltpläne gibt es... um es kurz zu fassen, das byte1 bestimmt um welche Platine es sich handelt und damit verbunden welche ein oder ausgänge ich brauche... Habe mal das Portbelegungsplänchen hochgeladen... Daraus kann man es erkennen... Daher ja mein Problem das ich abhängig vom BYTE1 im Unterprogramm erst die Ports belegen kann als Ein oder Ausgang.... Soweit sollte es ja gehen bis auf die sache mit dem Display... aber wiedo kann das denn mit dem While ncht gehen??? Danke dir wirklich sehr
Uwe K. schrieb: > Wir brauchen in unserem Programm den Port D mehrfach...Einmal als > Eingang und einmal als Ausgabe für das LCD Display... doch leider geht > das nicht... Natürlich geht das nicht ohne eine Zusatzschaltung. Sonst kämpfen die Eingänge mit den Ausgängen, bzw. das Gerät an den Ausgängen spielt verrückt. Man kann mit zusätzlichen Signalen einen Eingangstreiber in Tristate setzen, wenn die Pins Ausgänge sein sollen. Und man kann mit einem Latch die Ausgänge stabil halten, solange die Pins Eingänge sein sollen. Beim (HD44780) LCD gibt es noch eine Ausnahme, man muß nur den E-Pin stabil auf low halten, wenn es nicht geschrieben wird. Peter
Also ich habe um das Display überhaupt in Betrieb zu nehmen einen Schaltung davor die die gesamte Betriebsspannung vom Display trennt über einen freien Portpin... Aber wenn ich nun hingehe und das Display von vorne herein als Ausgang deklariere durhc meine LCD.h, so kann ich es ja nicht in einem unterprogramm wieder in einen Eingang ändern. Das meine ich damit, ich muss es im Unterprogramm die LCD.h einbringen nur das lässt er nicht zu...
Uwe K. schrieb: > Also ich habe um das Display überhaupt in Betrieb zu nehmen einen > Schaltung davor die die gesamte Betriebsspannung vom Display trennt über > einen freien Portpin... > > Aber wenn ich nun hingehe und das Display von vorne herein als Ausgang > deklariere durhc meine LCD.h, so kann ich es ja nicht in einem > unterprogramm wieder in einen Eingang ändern. Das meine ich damit, ich > muss es im Unterprogramm die LCD.h einbringen nur das lässt er nicht > zu... Mir scheint du kennst dich nicht nur mit C nicht so gut aus, sondern auch nicht mit der µC-Hardware. Sobald du RA5 änderst (Display an/aus), kannst du doch auch die Richtung von PortD ändern. Das hast du doch so ähnlich in deinem Programm oben gemacht.
Ich weiss der eine oder andere meint ich solle lieber die finger davon lassen, aber ich kann nicht mehr zurück,. da unser eigendlicher Programmierer für das Projekt schwer krank geworden ist, daher müssen wir das jetzt retten... Ok ich weiss das ich es ein und ausschalte... aber wie du siehst, habe ich die if(Byte1=0x80) //Analog Eingang Aktiv { //#include Projekt_Display.h ausgekommentiert, weil wenn ich die aktiv lasse dann meckert er sofort... Ich muss die aber rein theoretisch hier erst reinsetzten, oder denke ich total verkehr...
Uwe K. schrieb: > if(Byte1=0x80) du meinst wohl if(Byte1==0x80) ich denke du willst hier eine überprüfung machen, keine zuweisung. Daher meckert er auch
Uwe K. schrieb: > Ich weiss der eine oder andere meint ich solle lieber die finger davon > lassen, aber ich kann nicht mehr zurück,. da unser eigendlicher > Programmierer für das Projekt schwer krank geworden ist, daher müssen > wir das jetzt retten... Ok ich weiss das ich es ein und ausschalte... > aber wie du siehst, habe ich die > if(Byte1=0x80) //Analog Eingang Aktiv > { > //#include Projekt_Display.h > ausgekommentiert, weil wenn ich die aktiv lasse dann meckert er > sofort... > > Ich muss die aber rein theoretisch hier erst reinsetzten, oder denke ich > total verkehr... Du kannst nicht zur Laufzeit Headerdateien einbinden. Headerdateien gehören an den Anfang des C-Files. Dahin wo z.B.auch <delay.h> steht. Falls jetzt der Compiler meckert, dann must du das nächste Problem beheben. Würdest du den kompletten SourceCode posten könnte man dir eventuell weiterhelfen. Andererseits behaupte ich jetzt mal (wenn ich so sehe, was an C-Code produziert wurde), dass du das ganze nicht in zwei Wochen zum Laufen bekommst.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.