www.mikrocontroller.net

Forum: Mikrocontroller und Elektronik Problem mit M16C und HEW

Autor: Michael St. (dd4ms)
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
Autor: Ekschperde (Gast)
Datum: 23.01.2008 23:32

Versuchs mal damit:
http://america.renesas.com/fmwk.jsp?cnt=io_wizard_...

Da kann man dann nichts vergessen :-)
Autor: Rudi (Gast)
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
Autor: Michael St. (dd4ms)
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.
Autor: Sascha Focus (sascha_focus)
Datum: 24.01.2008 14:28

Soweit ich es noch in Erinnerung habe, ist Port 9 Protected. Dieses muß
noch aufgehoben werden.

Gruß Sascha
Autor: Stefan "stefb" B. (stefan) Benutzerseite
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.
Autor: Sascha Focus (sascha_focus)
Datum: 24.01.2008 14:41

Ok, man sollte besser lesen:

"
  prc2 = 1;
  pd9.byte = 0x00;
  prc2 = 0;
"

Hast du ja anscheinend gemacht.
Autor: Michael St. (dd4ms)
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.
Autor: Stefan "stefb" B. (stefan) Benutzerseite
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...
Autor: Stefan "stefb" B. (stefan) Benutzerseite
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.
Autor: Martin (Gast)
Datum: 24.01.2008 15:42

Welchen M16C benutzt du denn genau?
Autor: Michael St. (dd4ms)
Datum: 24.01.2008 16:25

Hi

den M16C62A 100Pin V.
Autor: Obelix X. (obelix)
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."
Autor: Michael St. (dd4ms)
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.
Autor: Olaf (Gast)
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
Autor: Michael St. (dd4ms)
Datum: 24.01.2008 18:29

Hallo Olaf,

die def ist vom KPIT GNU Compiler.
Autor: Obelix X. (obelix)
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.
Autor: Olaf (Gast)
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
Autor: Obelix X. (obelix)
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.
Autor: Rudi (Gast)
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






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net