Hallo Leute, ich habe ein Problem mit der Entwicklungsumgebung HEW 4 und den KPIT GNU Compiler. Ich schaffe es nicht den Port 9 als Ausgang zu definieren. Bin am verzweifel. Ich weis nicht ob es eine Einstellung am Compiler ist oder ob ich zu doof bin. #include "iodefine.h" #include <stdio.h> void init(void) { pd7.byte = 0xff; p7.byte = 0x00; prc2 = 1; pd9.byte = 0x00; prc2 = 0; p9.byte = 0x00; #define taster p9.byte #define led p7_4 } int main (void) { // TODO: add application code here init(); while (1){ if(taster >= 0x01) { led = 1;} else { led = 0;} } return (0); } Vieleicht kann mir jemand helfen! mfg Michael
Versuchs mal damit: http://america.renesas.com/fmwk.jsp?cnt=io_wizard_software_tools_root.jsp&fp=/products/tools/coding_tools/application_builders/io_wizard/ Da kann man dann nichts vergessen :-)
> Ich schaffe es nicht den Port 9 als Ausgang zu definieren
soll Port9 wirklich als AUSGANG fungieren? - du hast dort deinem
Programm nach aber einen Taster angeschlossen - das spricht für einen
EINGANG - so wie du es auch im Programm deklariert hast.
Rudi
Hi, sorry habe mich verschrieben. Soll natürlich ein Eingang sein. Mit den IO Manager habe ich es probiert. Aber es funzt trotzdem nicht.
Soweit ich es noch in Erinnerung habe, ist Port 9 Protected. Dieses muß noch aufgehoben werden. Gruß Sascha
Sascha Focus wrote: > Soweit ich es noch in Erinnerung habe, ist Port 9 Protected. Dieses muß > noch aufgehoben werden. > > Gruß Sascha Das machen die Zeilen prc2 = 1; // Schreibschutz aufheben //... prc2 = 0; // Schreibschutz setzen Aber p9.byte = 0x00; sehe ich ausserhalb dieser Schreibschutz-Klammer. Vielleicht diese Anweisung in die Klammer reinziehen. Disclaimer: Ins Datenblatt habe ich nicht geschaut, ob der Wert 0x00 korrekt ist oder ob p9 solch ein geschützter Port ist.
Ok, man sollte besser lesen: " prc2 = 1; pd9.byte = 0x00; prc2 = 0; " Hast du ja anscheinend gemacht.
hi, ich dreh hier gleich noch durch. Es kann doch nicht so schwer sein einen Port als Eingang zu betreiben.
Wie ist der Taster angeschlossen? Kann es sein, dass dir der Pill-Up zu Vcc (bei active-low) oder der Pull-Down zu GND (bei active-high) fehlt? Zu active-... http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Tasten_und_Schalter
Im Datenblatt (Hardware Manual) vom M16C/28 steht was, dass das PACR (pin assignment control) Register korrekt zu initialisieren ist jenachdem ob 80-Pin oder 64-Pin Version. Ohne diese Initialisierung arbeiten einige Pins nicht korrekt. dass der Schreib- und Lesezugriff auf P9 nicht in die Schreibschutzklammer rein muss. Nur der PD9 Zugriff.
Bist du dir sicher, dass
> taster >= 0x01
richtig ist? Normal hat man Pullups an den Eingängen. Wenn du nur einen
Pin auf Low ziehst hast du nach wie vor einen Wert >= 1. Hast du
überhaupt Pullup angeschlossen? Die Internen Pullups hast du ja nicht
eingeschaltet.
Nur mal als Hinweis:
PRC2 brauch man nicht wieder auf 0 zurück setzen. Vor PRC2=1 MÜSSEN alle
Interrupts gesperrt werden.
"Set the PRC2 bit to 1 (write enabled) and then write to any address,
and the PRC2 bit will be cleared to 0
(write protected). The registers protected by the PRC2 bit should be
changed in the next instruction after
setting the PRC2 bit to 1. Make sure no interrupts or DMA transfers
will occur between the instruction in
which the PRC2 bit is set to 1 and the next instruction. The PRC0, PRC1
and PRC3 bits are not automati-
cally cleared to 0 by writing to any address. They can only be cleared
in a program."
Hallo Leute, es handelt sich um das Board von: http://www.mikrocontroller.com/de/m16c-ctrl.php Die Schaltung ist so aufgebaut das Taster 1 bis 5 über 100k auf GND gezogen werden. Also ein Klassisches externes PullDown. Beim schließen dann mit 1k auf VCC. Dennach müsste in Ruhestellung an den Portpins 0V anliegen. Also eine logische =0. Bei betätigen 5V logisch 1. Diese Zustände müsste ich ins Port Register einlesen und auswerten können. Funz aber nicht. Zur Kontrolle ob ich den Port abgeschossen habe, habe ich ein Beispiel .mot File eingespielt. Da funzt die Eingabe über die Tasten. Nur die Quelldateien kann ich auch nicht übersetzen. Dann überschlagen sich die Fehlermeldungen bei mir.
Mal eine bloede Frage, aber was ist das hier fuer eine komische Definition? pd9.byte = 0x00; Bei mir sieht das z.B so aus: prc2 = 1; /* Das Direktion-Register von Port9 muss freigeschaltet werden! */ pd9 |= 0x60; /* Alle genutzten Port auf Ausgang schalten */ pd9_7 = 0; /* Dateneingang */ pd4 |= 0x1f; prc2 = 0; /* Dateneingang vom RFM12 Modul */ int RF12_DATA_in(void) { if (p9_7 == 0) return(FALSE); else return(TRUE); }; Obiges habe ich mal 1:1 so aus einem funktionierendem Programm von mir kopiert. Ich schreibe also in pd9. Ich benutze jetzt zwar nur noch den gcc, habe das aber mit dem Renesascompiler genauso gemacht. Olaf
@Olaf Dein Code ist nicht richtig, siehe meinen Hinweis von oben. Nach einem Zugrif auf pd9 wird PRC2 ->Automatisch<- auf 0 gesetzt und damit wieder gesperrt.
> Dein Code ist nicht richtig, siehe meinen Hinweis von oben.
Mein Code funktioniert aber! :-P
Haengt aber wohl vom Prozessor ab. Ich hab hier momentan einen
M30620FCAP (M16C/62) in der mache wo es geht. Da steht auch nichts davon
im Datenblatt das da was zurueckgesetzt wird.
Im Datenblatt zum M16C/28 steht es allerdings.
Aber trotzdem danke fuer den Tip, waer ich vermutlich in ein paar Wochen
drauf reingefallen wenn ich da Code ruebergezogen haette.
Olaf
Ich habe mal ein paar Datenblätter durchgeschaut. Überall habe ich das Verhalten des PCR2 Bit so gefunden wie von mir beschrieben. Ich behaute einfach mal ganz frech ;-) , dass dein Code nur Zufällig funktioniert. (nicht böse gemeint) PD9 ist nach einem Reset 0x00 -> alles Eingänge. Das erste Schreiben des PD9 wird richtig usgeführt und das "pd9_7 = 0" wirkt sich nicht negativ auf das Programm aus (bewirkt aber auch nichts). Würde bei dir PD9 durch einen Zufall falsch sein funktioniert dein Programm nicht mehr richtig.
@Obelix > Ich behaute einfach mal ganz frech ;-) , dass dein Code nur Zufällig > funktioniert. (nicht böse gemeint) ..recht hast du Rudi
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.