Datum: 23.01.2008 22:59
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
Datum: 23.01.2008 23:32
Versuchs mal damit: http://america.renesas.com/fmwk.jsp?cnt=io_wizard_... Da kann man dann nichts vergessen :-)
Datum: 24.01.2008 08:52
> 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
Datum: 24.01.2008 14:25
Hi, sorry habe mich verschrieben. Soll natürlich ein Eingang sein. Mit den IO Manager habe ich es probiert. Aber es funzt trotzdem nicht.
Datum: 24.01.2008 14:28
Soweit ich es noch in Erinnerung habe, ist Port 9 Protected. Dieses muß noch aufgehoben werden. Gruß Sascha
Datum: 24.01.2008 14:39
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.
Datum: 24.01.2008 14:41
Ok, man sollte besser lesen: " prc2 = 1; pd9.byte = 0x00; prc2 = 0; " Hast du ja anscheinend gemacht.
Datum: 24.01.2008 15:04
hi, ich dreh hier gleich noch durch. Es kann doch nicht so schwer sein einen Port als Eingang zu betreiben.
Datum: 24.01.2008 15:19
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-Tu...
Datum: 24.01.2008 15:35
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.
Datum: 24.01.2008 17:31
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."
Datum: 24.01.2008 18:01
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.
Datum: 24.01.2008 18:16
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
Datum: 24.01.2008 18:29
Hallo Olaf, die def ist vom KPIT GNU Compiler.
Datum: 24.01.2008 18:40
@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.
Datum: 24.01.2008 19:30
> 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
Datum: 24.01.2008 20:16
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.
Datum: 25.01.2008 12:45
@Obelix > Ich behaute einfach mal ganz frech ;-) , dass dein Code nur Zufällig > funktioniert. (nicht böse gemeint) ..recht hast du Rudi
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel


