PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : M32/M128 Pro Display, EEPROM, SRAM, Master / Slave Fragen



Tobias1
02.04.2010, 12:35
Hallo Roboternetzler,

ich habe seit genau einem Jahr einen RP6(hab ihn letztes Jahr zum 12. Geburtstag bekommen). Ich habe ein M32 mit 16x2 Zeichen Display und ein M128 Pro ebenfalls mit einem 16x2 Zeichen Display.

1. Kann ich statt den beiden 16x2 Zeichen Displays zwei 20x4 Zeichen Displys anschliesen und diese auch ansprechen?
2. Was müsste ich in den Libs ändern?

Desweiteren möchte ich das M32 und das BASE als Slave vom M128 Pro aus steuern. Für das BASE ist eine Slave Lib ja schon mitgeliefert worden, für das M32 habe ich eine eigene geschrieben(Anhang).

3. Was habt ihr für verbesserungsvorschläge für meine Slave Lib?
4. Ist es sinnvoll das M32 UND das BASE als Slave zu verwenden?

Ich habe auf das M32 und auf das M128 Pro ein 1Mbit EEPROM aufgelötet, wie hier (http://www.rn-wissen.de/index.php/RP6#Umbau-Optionen_2) gezeigt.

5. Wie muss ich den Code in den Libs ändern, aus der Anleitung im Wissensbereich werde ich nicht schlau...
6. Wie muss ich den Code für das M128 Pro ändern?

Auf dem M128 Pro sind die Ports A und C nicht "belötet". ich habe wannenstecker gekauft und gehört, das man das SPI SRAM deaktivieren muss, um diese Ports zu nutzen. In der Anleitung steht, das es keine gute Idee ist, es zu deaktivieren, aber ich habe doch ein weitaus größeres EEPROM!

7. Also ist es doch sinnvoll es zu deaktievieren, oder?
8. Ich wollte hinten am RP6 noch 2 Lichtsensoren(über ADC0 und ADC1) und 2 Bumper (Eventuel I/O 0 und I/O 1) anschließen.
9. Welche Lichtsensoren(Bumper) werden Vorne verwendet?

Ich würde nähmlich gerne die selben verwenden.

Ich hoffe, das ich euch mit den Fragen nicht zu sehr vollgequatscht habe...

MfG,

Tobias1

SlyD
02.04.2010, 19:08
Habe keine Zeit alles zu beantworten aber:

> SPI SRAM

Das ist natürlich Kein SPI SRAM.

Das ist ein paralleles 64KByte
SRAM am XMEM Interface vom MEGA128. Es wird hier also das interne 4KByte RAM (Arbeitsspeicher) der CPU auf 64K erweitert und nicht die "Festplatte" (EEPROM)
- hoffe das ist so verständlich ;)

Externes EEPROM kannst Du auch einfach irgendwo z.B. auf der Experimentierplatine an den I2C Bus hängen.

Und Portexpander wie der PCF8574 können an den I2C Bus gehängt werden wenn man noch mehr zusätzliche ports braucht.
(dazu Forum Suchfunktion benutzen!)


MfG,
SlyD

Tobias1
02.04.2010, 19:19
Danke für deine Antwort.
as EEPROM habe ich auf den eingebauten Sockel gesteckt. Was muss ich in den Libs ändern um es anzusprechen?
Zum Thema Portexpander: Ich überlegs mir (wenn ich mal Portmagel haben SOLLTE) , 3€ sind jezt ned die Welt, aber wie spreche ich den dan an? Etwa so ?

Pseudocode:


I2C_BUS_Send(Portexpander_ADR, Schalte 1.Port an(aus))

Nochmals danke für die Schnelle antwort,

Tobias1

Tobias1
03.04.2010, 19:26
Weis sonst noch jemad irgendwas? :-s :?:

TrainMen
04.04.2010, 18:08
Hi,
zum Portexpander kannst du dir die Beispiele RP6Base_I2CMaster ansehen.
Trainmen

Tobias1
07.04.2010, 10:36
Hey Cool,

die Beispiele sind ja echt gut zu verstehen. Aber weis jemad noch etwas über die anderen Punkte?

Magelan1979
02.05.2010, 10:51
Hallo Tobias,
da mein M128 teilweise defekt ist, wollte ich die M32 als Slave verwenden und Deine RP6Controll_I2CSlave.c verwenden. Allerdings bekomme ich diese nicht zum laufen. War Deine lauffähig? Beim kompilieren spinnt meiner in der task_commandProcessor() und zwar bei der Auswertung von

case CMD_SHOWSCREENLCD: showScreenLCD(param1[], param2[]); break;

Kommentiere ich das ganze aus, wird die Fehlermeldung noch unschöner.



-------- begin --------
avr-gcc (WinAVR 20100110) 4.3.3
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Compiling: RP6Control_09_Move.c
avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=RP6Control_09_Move.lst -I../../RP6Lib -I../../RP6Lib/RP6control -I../../RP6Lib/RP6common -std=gnu99 -MD -MP -MF .dep/RP6Control_09_Move.o.d RP6Control_09_Move.c -o RP6Control_09_Move.o

Linking: RP6Control_09_Move.elf
avr-gcc -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=RP6Control_09_Move.o -I../../RP6Lib -I../../RP6Lib/RP6control -I../../RP6Lib/RP6common -std=gnu99 -MD -MP -MF .dep/RP6Control_09_Move.elf.d RP6Control_09_Move.o ../../RP6Lib/RP6control/RP6ControlLib.o ../../RP6Lib/RP6common/RP6uart.o RP6Control_I2CMasterLib.o ../../RP6Lib/RP6common/RP6I2CmasterTWI.o --output RP6Control_09_Move.elf -Wl,-Map=RP6Control_09_Move.map,--cref -lm
RP6Control_09_Move.o: In function `signalInterrupt':
C:\Users\MagelansPC\Desktop\RP6\Projekt 1\Projekt\RP6 M32 Slave/RP6Control_09_Move.c:69: undefined reference to `I2CTWI_dataWasRead'
RP6Control_09_Move.o: In function `getCommand':
C:\Users\MagelansPC\Desktop\RP6\Projekt 1\Projekt\RP6 M32 Slave/RP6Control_09_Move.c:155: undefined reference to `I2CTWI_writeRegisters'
C:\Users\MagelansPC\Desktop\RP6\Projekt 1\Projekt\RP6 M32 Slave/RP6Control_09_Move.c:155: undefined reference to `I2CTWI_writeBusy'
C:\Users\MagelansPC\Desktop\RP6\Projekt 1\Projekt\RP6 M32 Slave/RP6Control_09_Move.c:157: undefined reference to `I2CTWI_writeRegisters'
C:\Users\MagelansPC\Desktop\RP6\Projekt 1\Projekt\RP6 M32 Slave/RP6Control_09_Move.c:158: undefined reference to `I2CTWI_writeRegisters'
C:\Users\MagelansPC\Desktop\RP6\Projekt 1\Projekt\RP6 M32 Slave/RP6Control_09_Move.c:159: undefined reference to `I2CTWI_writeRegisters'
C:\Users\MagelansPC\Desktop\RP6\Projekt 1\Projekt\RP6 M32 Slave/RP6Control_09_Move.c:160: undefined reference to `I2CTWI_writeRegisters'
C:\Users\MagelansPC\Desktop\RP6\Projekt 1\Projekt\RP6 M32 Slave/RP6Control_09_Move.c:161: undefined reference to `I2CTWI_writeRegisters'
RP6Control_09_Move.o:C:\Users\MagelansPC\Desktop\R P6\Projekt 1\Projekt\RP6 M32 Slave/RP6Control_09_Move.c:162: more undefined references to `I2CTWI_writeRegisters' follow
RP6Control_09_Move.o: In function `task_updateRegisters':
C:\Users\MagelansPC\Desktop\RP6\Projekt 1\Projekt\RP6 M32 Slave/RP6Control_09_Move.c:107: undefined reference to `I2CTWI_readBusy'
C:\Users\MagelansPC\Desktop\RP6\Projekt 1\Projekt\RP6 M32 Slave/RP6Control_09_Move.c:117: undefined reference to `I2CTWI_dataWasRead'
C:\Users\MagelansPC\Desktop\RP6\Projekt 1\Projekt\RP6 M32 Slave/RP6Control_09_Move.c:117: undefined reference to `I2CTWI_dataReadFromReg'
RP6Control_09_Move.o: In function `main':
C:\Users\MagelansPC\Desktop\RP6\Projekt 1\Projekt\RP6 M32 Slave/RP6Control_09_Move.c:231: undefined reference to `I2CTWI_initSlave'
make: *** [RP6Control_09_Move.elf] Error 1

> Process Exit Code: 2
> Time Taken: 00:00


Gruß und weiter ein schönen WE

SlyD
02.05.2010, 14:07
Compilerausgabe:
>> ../../RP6Lib/RP6common/RP6I2C___master___TWI.o


Check mal das Makefile ob da auch die I2C Slave Libs eingebunden werden.
Die sind standardmßig auskommentiert.

So müsste es als Slave aussehen:
SRC += $(RP6_LIB_PATH)/RP6common/RP6I2CslaveTWI.c
#SRC += $(RP6_LIB_PATH)/RP6common/RP6I2CmasterTWI.c


MfG,
SlyD

Magelan1979
02.05.2010, 18:56
Danke SlyD. Es lag wirklich unter anderem an dem falschen Import.

copcom-weber
26.05.2010, 17:53
wodran lag es denn noch bekomme es nicht zum laufen

Magelan1979
26.05.2010, 19:24
Puhh, alte Fehler raussuchen ist schwer, aber ich meine, dass es an folgender Zeile lag.


case CMD_SHOWSCREENLCD: showScreenLCD(param1[], param2[]); break;

Habe sie einfach auskommentiert und neu geschrieben

Was für Fehlermeldungen bekommst Du denn ?

copcom-weber
26.05.2010, 19:42
ja genau an der stelle.
und die meldung was muss ich jetzt genau machen?
neu geschrieben hab ich die aber ändert nichts

Magelan1979
26.05.2010, 20:02
Also ich hatte die funktionalität höchst umständlich neu Programmiert und diesen CASE ausgelassen

Meine void task_commandProcessor sieht so aus
ACHTUNG HÖCHST UMSTÄNDLICH!!!


**
* This function checks if commands have been received and processes them.
*/
void task_commandProcessor(void)
{
if(getCommand())
{
switch(cmd)
{
case CMD_SETLEDS: setLEDs(param1); break;
case CMD_CLEARLCD: clearLCD(); break;
case CMD_WRITECHARLCD: writeCharLCD(param1); break;
case CMD_DISCHARGEPEAKDETECTOR: dischargePeakDetector(); break;
case CMD_BEEP: beep(param1, param2); break;
case CMD_SETBEEPERPITCH: setBeeperPitch(param1); break;
case CMD_MSLEEP: mSleep(param1); break;
case CMD_WRITE_I_AT_POSITION:
if(param1 < 100)
{
setCursorPosLCD(0,param1);
writeIntegerLCD(param2,DEC);
writeInteger(param2,DEC);
}
else
{
setCursorPosLCD(1,(param1-100));
writeIntegerLCD(param2,DEC);
writeInteger(param2,DEC);
}
case CMD_WRITE_S_AT_POSITION:
if(param1 < 100)
{
setCursorPosLCD(0,param1);
writeCharLCD(param2);

}
else
{
setCursorPosLCD(1,(param1-100));
writeCharLCD(param2);
}
}
}
}


Die entsprechenden Anpassungen im M128


Sub getASCII(a As Char) As Integer
Dim t(52) As Char
Dim k As Integer
Dim i As Integer

k = 32
t = "! #$%&'()*+,-./0123456789:;<=>?"
For i=0 To 30
If t(i) = a Then
k = i+33
Return k
Exit
End If
Next
t ="@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_"
For i=0 To 31
If t(i) = a Then
k = i+64
Return k
Exit
End If
Next
t = "`abcdefghijklmnopqrstuvwxyz{|}~"
For i=0 To 30
If t(i) = a Then
k = i+96
Return k
Exit
End If
Next
Return k
End Sub

Sub showScreenM32Integer(i As Word, j As Word)
RP6_writeCMD_2params(RP6_M32_ADR, CMD_WRITE_I_AT_POSITION, 0, i)
RP6_writeCMD_2params(RP6_M32_ADR, CMD_WRITE_I_AT_POSITION, 100, j)
End Sub
Sub showScreenM32String(ByRef text1 As Char, ByRef text2 As Char)

Dim i As Integer
Dim size As Word
Dim asciiValue As Word
Thread_Lock(1)

size = Str_Len(text1)
printInteger(size)
For i=0 To size-1
asciiValue = getASCII(text1(i))
RP6_writeCMD_2params(RP6_M32_ADR, CMD_WRITE_S_AT_POSITION, i, asciiValue)
Thread_Delay(50)
Next
size = Str_Len(text2)

For i=0 To size-1
asciiValue = getASCII(text2(i))
RP6_writeCMD_2params(RP6_M32_ADR, CMD_WRITE_S_AT_POSITION, i+100, asciiValue)
Thread_Delay(50)
Next

Thread_Lock(0)



End Sub


Wie gesagt, eine sehr unschöne und beschämende Lösung. War für den Zweck aber ausreichend

copcom-weber
27.05.2010, 08:53
danke habs einfach auskommentiert breauche das eh nicht habe mein lcd an der M128.
trotzdem danke