Forum: Compiler & IDEs Verständnis-Hilfe


von Wild (Gast)


Lesenswert?

Hey Leute.
Wahrscheinlich hab ich jetzt grad nur ein Brett vorm Kopf aber ich hätte 
ne Frage.
(Ich programmiere nicht auf einem Atmega sondern einem R8C/13 und stelle 
diese Frage nur des Verständnisses wegen ;))
1
static void lcd_enable( void )
2
{
3
    LCD_PORT |= (1<<LCD_EN);     // Enable auf 1 setzen
4
    _delay_us( LCD_ENABLE_US );  // kurze Pause
5
    LCD_PORT &= ~(1<<LCD_EN);    // Enable auf 0 setzen
6
}
Die Enable funktion in der lcd_routines.c
Und zwar ist meine Frage:
Warum Wird der Bit so unständlich gesetzt? Warum nicht einfach 
"LCD_EN=1"?
Und warum heißt es "(1<<LCD_EN)"? Das würde ja eigentlich heißen , dass 
der der Bit an der Stelle des momentanen Wertes gesetzt werden soll und 
nicht , dass der bit am Pin von "LCD_EN" gesetzt werden soll. Oder steht 
in LCD_EN, wenn es z.B. p0_5 ist 5 (bzw. die Adresse?)?
Fragen über fragen ;)
Hoffe auf eine schnelle Antwort
LG euer Wild

von Chris (Gast)


Lesenswert?


von Helfer (Gast)


Lesenswert?

> (Ich programmiere nicht auf einem Atmega sondern einem R8C/13 und stelle
> diese Frage nur des Verständnisses wegen ;))

R8C und AVR bzw. eher deren Toolchains unterscheiden sich an der Stelle 
Bitzuweisung.

Beim AVR ist es bei der GCC Toolchain vorgesehen, dass die Zuweisungen 
an 8-Bit oder 16-Bit Register erfolgen. Bei einzelnen Bits muss man also 
Zuweisungen benutzen, die die restlichen Bits unverändert lassen. Bsp

      /* Port A.Pin 0 zwischen HIGH und LOW umschalten */
      PORTA ^= (1<<0);

Die Bitnummer 0 definiert man dabei wegen der leichteren Lesbarkeit und 
Vergleich mit dem Datenblatt als

#define PA0 0

so dass die Zeile dann lautet
      /* Port A.Pin 0 zwischen HIGH und LOW umschalten */
     PORTA ^= (1<<PA0);

Beim R8C kann man (jedenfalls bei der Renesas Toolchain) auch direkt 
einzelne Bits zuweisen. Bsp.:

      /* Port 1.Pin 0 zwischen HIGH und LOW umschalten */
      p1_0 ^= 1;

von Wild (Gast)


Lesenswert?

Achso. Die machen das also als Bitnummer.
Vielen dank ;)

von Wild (Gast)


Lesenswert?

Noch eine Frage:
Wenn ich einen Byte auf 4 Pins lege , ist dort dann die obere oder 
untere Bytehälfte?
Lg Wild

von Rolf Magnus (Gast)


Lesenswert?

Wild schrieb:
> Noch eine Frage:
> Wenn ich einen Byte auf 4 Pins lege , ist dort dann die obere oder untere 
Bytehälfte?

Das kommt darauf an, was du unter "einen Byte auf 4 Pins" verstehst. 
Wenn du ein Byte einem Register zuweist, dann werden alle 8 Bit 
ausgegeben. Wenn das nur 4 Bit sein sollen, mußt du das entsprechend 
maskieren, und davon, was du maskierst, hängt dann ab, welche Bits 
geschrieben werden.

von Wild (Gast)


Lesenswert?

Rolf Magnus schrieb:
> Wenn das nur 4 Bit sein sollen, mußt du das entsprechend
> maskieren, und davon, was du maskierst, hängt dann ab, welche Bits
> geschrieben werden.

.... ja ne -.-
Bsp:
1
unsigned char byte = 0b00001111;
2
lcd_out(byte);
3
lcd_out(byte<<4);
Wird bei dem ersten '0000' oder '1111' "gesendet" bzw. umgekehrt beim 
zweiten.
Ist die Frage jetzt klar ?
Wild

von Wild (Gast)


Lesenswert?

Argh! Hab die Funktion falsch im Kopf gehabt. Jetzt is es mit klar (hab 
die "LCD_PORT |= (data>>(4-LCD_NB);" Zeile nicht überdacht ;) )
Aber trotzdem Danke ;)
Lg wild

von Wild (Gast)


Lesenswert?

Und NOCHMAL ne frage ;)
Gibt es beim Renasas Compiler eine Funktion , mit welcher ich die 
digitalen werte der Pins ansehen kann bzw. das Schritt für Schritt. Bei 
mir tut sich nämlich NICHTS ;).
Lg Wild.

von ... (Gast)


Lesenswert?

Wild schrieb:
> Gibt es beim Renasas Compiler eine Funktion , mit welcher ich die
> digitalen werte der Pins ansehen kann bzw. das Schritt für Schritt.

Hat mit dem Compiler nichts zu tun.

Nennt sich Debugger und hört bei Renesas auf den Namen KD30
(zumindest bei mir).

von Wild (Gast)


Lesenswert?

... schrieb:
> Nennt sich Debugger und hört bei Renesas auf den Namen KD30
> (zumindest bei mir).

Nene so war das nich gemeint. Debugger kenn ich schon aber da fehlt 
leider eine wichtige Funktion. Und zwar die ,dass ich betrachten kann 
welche pins gerad was für eine Schaltung (0,1) haben.
Wenn ich im Debugger nämlich eine Port-Variable (z.B. p1 oder p1_0 etc.) 
als Watch deklariere , dann wird "not active" angezeigt während des 
ganzen Programmverlaufs( ja ich weiß wie ein Debugger funktioniert ;) )
Beim Namen vom DB bin ich mir unsicher. Ist aber glaub 
MC16_R8C_FoUSB_UART.

Ahnung?

Wild

von Ralf (Gast)


Lesenswert?

Wild schrieb:
> Und zwar die ,dass ich betrachten kann
> welche pins gerad was für eine Schaltung (0,1) haben.

Gibt's da kein 'Hardware-Fenster' ???

von Wild (Gast)


Lesenswert?

Ralf schrieb:
> Gibt's da kein 'Hardware-Fenster' ???

Mag sein , aber ich hab keine Ahnnung wo des ist :D.
Ich liste mal alle Teile auf die ich sehen kann.

-Registers (nimmt keine Adressen an :-|)
-RAM Monitor
-I/O
-Status
-Memory
-Watches (C und asm)
-S/W Breakpoints

Und bei keinem seh ich die richtigen Adressen etc...

von Ralf (Gast)


Lesenswert?

I/O ?!

von Wild (Gast)


Lesenswert?

Wild schrieb:
> -Registers ----------------------
> -RAM Monitor
> -I/O (nimmt keine Adressen an :-|)

So sry.
I/O tut nämlich nix...

von Ralf (Gast)


Angehängte Dateien:

Lesenswert?

Beim AVR-Studio gibt's sowas (Anhang)

von Wild (Gast)


Angehängte Dateien:

Lesenswert?

Jop ;)
So wie ersteres sollte es auch aussehen , aber es sieht eher wie nummer 
2 aus ;)
LG
Wild

von Ralf (Gast)


Lesenswert?

Hast du deinem Debugger auch verraten, welchen µC du verwendest?

von Wild (Gast)


Lesenswert?

Ralf schrieb:
> Hast du deinem Debugger auch verraten, welchen µC du verwendest?

Wild schrieb:
> MC16_R8C_FoUSB_UART.

Jop.

von Ralf (Gast)


Lesenswert?

Wild schrieb:
> Wild schrieb:
>> MC16_R8C_FoUSB_UART.

Das scheint den Debugger aber dann nicht zu interessieren.

von Wild (Gast)


Lesenswert?

Ralf schrieb:
> Das scheint den Debugger aber dann nicht zu interessieren.

Jetzt bleibt eben die Frage "Warum?".
Hoffentlich meldet sich noch jemand mit Erfahrung mit dem HEW.
Wild

von Helfer (Gast)


Lesenswert?

>Wild schrieb:
>> Wild schrieb:
>>> MC16_R8C_FoUSB_UART.

Das ist IMHO nur der Hinweis auf das Debuginterface (Target System for 
Debugging im Renesas Sprech) und keine Angabe auf das konkrete µC 
Modell. Die Lage der SFR unterscheidet sich vermutlich bei zwischen den 
Familien M16C und R8C und ggf. auch innerhalb der Gruppen einer Familie.

Interessant wäre, was du beim M16C_R8C_FoUSB_UART bei CPU Family, CPU 
Series, CPU Group in der Entwicklungsumgebung eingestellt hast.

Wenn die Probleme heute abend noch akut sind, kann ich bei meiner 
Installation genauer nachsehen.

von Wild (Gast)


Lesenswert?

Helfer schrieb:
> Interessant wäre, was du beim M16C_R8C_FoUSB_UART bei CPU Family, CPU
> Series, CPU Group in der Entwicklungsumgebung eingestellt hast.

Bei der Erstellung einer neuen Workspace ist man ja gezwungen dies alles 
einzugeben => R8C/13 (CPU Group 13)
Da müsste eigentlich alles stimmen.

Helfer schrieb:
> Wenn die Probleme heute abend noch akut sind, kann ich bei meiner
> Installation genauer nachsehen.

Das wäre nett ;). Die Probleme sind immer noch "akut" (=)) , da ich die 
letzten Tage leider keine Zeit hatte.

LG WILD

von Helfer (Gast)


Lesenswert?

Bei meinem Debugger (PD30SIM Version, Ja ich weiss ist alt :-) muss ich 
in dem Fenster http://www.mikrocontroller.net/attachment/111009/IO2.png 
einen Rechtsklick machen und dann über Load I/O File die 
Registerdefinition für den µC laden, die in der Datei 
D:\Elektronik\R8C\HEW\Tools\Renesas\DebugComp\Platform\PDTarget\PD30SIM\ 
IO  Files\R8C13.IO enthalten sind.

von Wild (Gast)


Lesenswert?

Helfer schrieb:
> Bei meinem Debugger (PD30SIM Version, Ja ich weiss ist alt :-) muss ich
> in dem Fenster http://www.mikrocontroller.net/attachment/111009/IO2.png
> einen Rechtsklick machen und dann über Load I/O File die
> Registerdefinition für den µC laden, die in der Datei
> D:\Elektronik\R8C\HEW\Tools\Renesas\DebugComp\Platform\PDTarget\PD30SIM\ IO
> Files\R8C13.IO enthalten sind.

Oh! Geile Sache!

Jetzt kommt direkt noch eine Frage:
Wenn ich einen Ausgang beim HEW auf 0 setze , wäre das dann wie eine 
1-Setzung beim AVR ?
Weil z.B. eine LED leuchtet wenn ich "ihren Pin" als Ausgang auf 0 
setze.

LG WILD

von Helfer (Gast)


Lesenswert?

> eine LED leuchtet wenn ich "ihren Pin" als Ausgang auf 0 setze.

Dann ist die LED active low (LED leuchtet bei Ausgangspin LOW) 
angeschlossen

PIN o----|<---###----o Vcc
        LED    R
         Vorwiderstand

Kann man machen, sowohl beim R8C als auch beim AVR.

Active high (LED leuchtet bei Ausgangspin HIGH) geht auch bei beiden

PIN o---->|---###----o GND
        LED    R
         Vorwiderstand

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
Noch kein Account? Hier anmelden.