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
staticvoidlcd_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
> (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;
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.
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
unsignedcharbyte=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
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
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.
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).
... 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
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...
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
>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.
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
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.
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
> 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