mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit M16C und HEW


Autor: Michael St. (dd4ms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:

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

Da kann man dann nichts vergessen :-)

Autor: Rudi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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:

Bewertung
0 lesenswert
nicht lesenswert
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) Benutzerseite
Datum:

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

Gruß Sascha

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, man sollte besser lesen:

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

Hast du ja anscheinend gemacht.

Autor: Michael St. (dd4ms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

ich dreh hier gleich noch durch. Es kann doch nicht so schwer sein einen 
Port als Eingang zu betreiben.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:

Bewertung
0 lesenswert
nicht lesenswert
Welchen M16C benutzt du denn genau?

Autor: Michael St. (dd4ms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

den M16C62A 100Pin V.

Autor: Obelix X. (obelix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:

Bewertung
0 lesenswert
nicht lesenswert
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:

Bewertung
0 lesenswert
nicht lesenswert
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:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Olaf,

die def ist vom KPIT GNU Compiler.

Autor: Obelix X. (obelix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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:

Bewertung
0 lesenswert
nicht lesenswert
> 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:

Bewertung
0 lesenswert
nicht lesenswert
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:

Bewertung
0 lesenswert
nicht lesenswert
@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 E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.