Propeller in 19"

Alles was Du selbst gebaut hast, hier herein. Das Projekt muss allerdings mit einem oder mehreren Parallax Propeller µC realisiert worden sein.

Meinung zu solchen Projekten.

Super das ist die Zukunft
3
11%
Naja hällt sich in Grenzen
2
7%
absolut Unbrauchbar
1
4%
das brauch Ich nicht
3
11%
ist mir zu Aufwendig
3
11%
Ich würde es nachbauen
4
14%
leider incompatibel zum HIVE
3
11%
neue Wege bereiten die Zukunft des HIVES
4
14%
Ich will kein Rack
1
4%
ein RACK ist OK
4
14%
 
Insgesamt abgegebene Stimmen: 28

Benutzeravatar
Micha
Beiträge: 813
Registriert: Sa 24. Mär 2012, 21:45
Wohnort: Merseburg
Kontaktdaten:

Re: Propeller in 19"

Beitrag von Micha »

offenbar bastelst Du an einem interessanten Projekt.

Ich bedauer es oft, dass wir von unseren Gedankengängen strukturell so verschieden sind - ich bin nicht in der Lage, aus deinen Postings ein klares Bild zusammen zu bekommen. Das ist wirklich schade :(

Trotzdem wünsch ich viel Spass weiterhin mit dem basteln und tüfteln...
Also vonder Sache här tätch jetz ma behaupten "Mischn ägomplischd" un so...
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller in 19"

Beitrag von PIC18F2550 »

Ist doch kein Problem.
Der eine Baut etwas nach und Berichtet.
Der ander Baut auf bewerte Technik und stellt daraus was neues zusammen und berichtet.
Und wieder andere versuchen was vollkommen neues zu finden.
Bei diesen ist so. Ein Beitrag, ist wie die Spur zur Lösung mit allen Ecken und Kanten und das das ist nicht immer leicht zu Verstehen ist ist mir schon klaar.
Neue Erkenntnisse ersetzen alte Festlegungen oder Sie gehen gleich über Bord.

Bei den ersten Beiden wegen ist alles immer klar und deutlich da es kaum Umwege gibt.
Bei dem letzteren ist das wie Krautsalat da darf mann nicht versuchen was ganzes daraus Abzuleiten.
Auf Grund der vielen Unstimmigkeiten wird das Ergebnis immer niederschmetternd sein.
Viel mehr sollte mann sich daraus nur ein Stückchen entnehmen und dieses Betrachten und Bewerten.
Da sich so ein Projekt meist erstmals nur aus Bruchstücken bildet.
So wie diese SRAM Ansteuerung.

Code: Alles auswählen

<EDIT>delete</EDIT>
In diesen Treiber kommen auch noch die Busroutinen und die Abfrage des PCA9555D über I2C hinein.
Der Vorteil ist das der Speicher (hRAM) für das Programm freigehalten wird.
Zuletzt geändert von PIC18F2550 am So 6. Jul 2014, 11:17, insgesamt 1-mal geändert.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller in 19"

Beitrag von PIC18F2550 »

Das soll der Treiber mal alles können

Code: Alles auswählen

PUB start_io:a
  a:=cognew(@sram, 0)+1
DAT
' ======================================================================================
' ROUTINE : Initalisierung
' ======================================================================================
sram
                    cogid   cogidm
                    add     cogidm,   #$1
                    wrlong  cogidm,   statusA      ' Commando löschen 
' ======================================================================================
' ROUTINE : Commandoauswertung
' ======================================================================================
TLOOP               nop                             ' Hier wird der Call des Sprungverteilers eingetragen.
                    andn    dira,     SRAM_io       ' BUS auf Eingabe schalten
                    rdlong  command, statusA
                    shr     command,  #$3           ' command byte[2..0] 'vom COG belegt
                    and     command,  #$1F
                    add     command,  #SPRV
                    movs    JUMPMOD,  command
                    nop                             'nop für pipeline
JUMPMOD             mov     TLOOP,    TLOOP
                    jmp     #TLOOP
SPRV                call    #dcall                  ' $00 (X) COGIDM 1..7  IO nichts Machen
                    call    #dcall                  ' $08 (X) COGIDM 8     IO nichts Machen
                    call    #BUS_read_W             ' $10 (.) word vom BUS lesen
                    call    #BUS_write_w            ' $18 (.) word auf BUS schreiben
                    call    #BUS_write_c            ' $20 (.) COMANDO auf BUS schreiben
                    call    #SRAM_read_B            ' $28 (.) Byte aus SRAM lesen
                    call    #SRAM_read_W            ' $30 (X) Word aus SRAM lesen
                    call    #SRAM_read_S            ' $38 (.) String aus SRAM lesen (immer im Wordformat)
                    call    #SRAM_write_B           ' $40 (.) Byte in SRAM schreiben
                    call    #SRAM_write_W           ' $48 (X) Word in SRAM schreiben
                    call    #SRAM_write_S           ' $50 (.) String in SRAM schreiben (immer im Wordformat)
                    call    #I2C_read_c             ' $58 (.) I²C Config lesen
                    call    #I2C_ledrg_00_c         ' $60 (X) I²C LED R/G off
                    call    #I2C_ledrg_0x_c         ' $68 (X) I²C LED R/_ off
                    call    #I2C_ledrg_x0_c         ' $70 (X) I²C LED _/G off
                    call    #I2C_ledrg_11_c         ' $78 (X) I²C LED R/G on
                    call    #I2C_ledrg_1x_c         ' $80 (X) I²C LED R/_ on
                    call    #I2C_ledrg_x1_c         ' $88 (X) I²C LED _/G on
                    call    #dcall_1                ' $90 (.) Commandofehler
                    call    #dcall_1                ' $98 (.) Commandofehler
                    call    #dcall_1                ' $A0 (.) Commandofehler
                    call    #dcall_1                ' $A8 (.) Commandofehler
                    call    #dcall_1                ' $B0 (.) Commandofehler
                    call    #dcall_1                ' $B8 (.) Commandofehler
                    call    #dcall_1                ' $C0 (.) Commandofehler
                    call    #dcall_1                ' $C8 (.) Commandofehler
                    call    #dcall_1                ' $D0 (.) Commandofehler
                    call    #dcall_1                ' $D8 (.) Commandofehler
                    call    #dcall_1                ' $E0 (.) Commandofehler
                    call    #dcall_1                ' $E8 (.) Commandofehler
                    call    #dcall_1                ' $F0 (.) Commandofehler
                    call    #dcall_1                ' $F8 (.) Commandofehler
' ======================================================================================
' Initialized data
' ======================================================================================
bootA               long  $7FFC                     ' 
statusA             long  $7FF8                     ' Statuszelle IO-Controll
db1A                long  $7FF4                     ' Adresse (Zeiger)
db2A                long  $7FF0                     ' Daten (Byte, Word und Long)
status              long  1
command             long  1
cogidm              long  1
' ======================================================================================
' Uninitialized data (Variabeln)
' ======================================================================================
temp1               long  1
temp2               long  1
' ======================================================================================
' dummy CALL
' ======================================================================================
' Commando IO nichts löschen 
dCall
dCall_ret           ret
' ======================================================================================
' dummy CALL
' ======================================================================================
' Commandofehler nichts löschen LED Meldung
dCall_1
dCall_1_ret         ret
(.) Quellcod fehlt noch
(A) Quellcod eingefügt aber noch nicht getestet
(X) Quellcode getestet IO
Zuletzt geändert von PIC18F2550 am Do 17. Jul 2014, 14:21, insgesamt 2-mal geändert.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller in 19"

Beitrag von PIC18F2550 »

Mit dem PASM Teil geht es irgend wie nicht vorwäts.
Da werd ich wohl oder übel auf die VGA warten müssen.
Mit dem PST.spin das zu suchen gestaltet sich schwierig da PASM wesendlich schneller ist.
Das ist meine Testroutine für den SRAM.

Code: Alles auswählen

CON
_CLKMODE     = XTAL1 + PLL16X
_XINFREQ     = 5_000_000

OBJ
  pst : "PST"

pub main|adr,sadr,a,mee,zei
  pst.start(115200)
  sram_ini(0)
  pst.Clear(0)
  pst.Position(0,0)
  pst.Str(@T000)
  pst.Position(0,1)
  sadr:=$0
  adr:=sadr
  mee:=$200000 ' 4Mb oder 2M Worde
  zei:=0
  repeat mee
    sram_write(adr,adr)
    adr++
  sram_write($222, $6666) ' <----- Test Fehler
  adr:=sadr
  repeat mee
    pst.hex(adr,8)
    pst.Str(@T003)
    a:=sram_read(adr)
    pst.hex(a,8)
    if a == adr & $0000FFFF
      pst.PositionX(0)
    else
      zei++    
      pst.char(13)
      if zei==16
        repeat
    adr++
    repeat 1000

pri sram_ini(a)
  outa[23..22]:=%00                       ' ADRH, ADRL
  outa[27..24]:=%1111                     ' /IORQ, /MREQ, /WR, /RD

pri sram_write(adr,data)
  dira[27..0 ]:=%1111_11000000_11111111_11111111
  outa[15..0 ]:=adr
  outa[23..22]:=%01                       ' ADRL strobe
  outa[23..22]:=%00                       ' ADRL
  outa[15..0]:=adr>>16
  outa[23..22]:=%10                       ' ADRH strobe
  outa[23..22]:=%00                       ' ADRH
  outa[15..0 ]:=data
  outa[27..24]:=%1001                     ' /IORQ, /MREQ, /WR, /RD
  outa[27..24]:=%1111                     ' /IORQ, /MREQ, /WR, /RD
  dira[27..0 ]:=%0000_00000000_00000000_00000000

pri sram_read(adr):data
  dira[27..0 ]:=%1111_11000000_11111111_11111111
  outa[15..0 ]:=adr
  outa[23..22]:=%01                       ' ADRL strobe
  outa[23..22]:=%00                       ' ADRL
  outa[15..0]:=adr>>16
  outa[23..22]:=%10                       ' ADRH strobe
  outa[23..22]:=%00                       ' ADRH
  dira[15..0 ]:=%00000000_00000000
  outa[27..24]:=%1010                     ' /IORQ, /MREQ, /WR, /RD
  data:=ina[15..0 ]
  outa[27..24]:=%1111                     ' /IORQ, /MREQ, /WR, /RD
  dira[27..0 ]:=%0000_00000000_00000000_00000000

DAT
T000  byte "HALLO PIC18F2550",0
T003  byte " ",0
Naja die Geschwindigkeit ist nicht gerade zum Abheben.
Wenn ich mich nicht verrechnet habe so braucht er ungefähr 2s für 32k
Bildschirmfoto-SimpleIDE Terminal.png
---------------------------------------------------------------------------------------------
Das ist der Code vom SRAM- Schreiben in PASM wie gesagt der klemmt irgend wie.

Code: Alles auswählen

' ======================================================================================
' SUBROUTINEN : Word in SRAM schreiben
' ======================================================================================
' SPIN  write db1             Adresse
' SPIN  write db2             Daten bit 15..0
' SPIN  write command :=  $5
' SPIN  read  command ==  $0  wenn Daten geschrieben sonnst immer noch $5
' --------------------------------------------------------------------------------------
' PASM  read  command ==  $5  Daten & Adresse holen
' PASM  write command :=  $0  wenn Daten geschrieben
' --------------------------------------------------------------------------------------
SRAM_write_W        call    #SRAM_adr
                    rdlong  temp1,    db2A          ' 16Bit Word holen
                    and     temp1,    M_16Bit      ' 16Bit auswählen
                    andn    outa,     M_16Bit      ' BUS auf $0000 setzen
                    or      outa,     temp1         ' einzen setzen
                    andn    outa,     MREQ_WR       ' auf 0 setzen aktiv
                    nop                             ' 50ns sind zu wehnig
                    or      outa,     MREQ_WR       ' auf 1 setzen inaktiv
                    andn    outa,     M_16Bit      ' BUS auf $0000 setzen
                    wrlong  cogidm,   statusA       ' Commando löschen 
                    andn    dira,     SRAM_io       ' BUS auf Eingabe schalten
SRAM_write_W_ret    ret                  
' ======================================================================================
' SUBROUTINEN : Setzt die 24Bit Adresse immer im Wordformat
' ======================================================================================
SRAM_adr            or      dira,     SRAM_io       ' BUS auf Ausgabe schalten
                    rdlong  temp1,    db1A          ' 24Bit adresse holen
'                    shr     temp1,    #1            ' Bit's um 1 stellen nach unten
                                                    ' Verschieben SRAM word-format
                    and     temp1,    M_16Bit      ' Low-Teil auswählen
                    andn    outa,     M_16Bit      ' BUS auf $0000 setzen
                    or      outa,     temp1         ' Einzen setzen
                    or      outa,     ADRL_strobe   ' auf 1 setzen aktiv
                    nop
                    andn    outa,     ADRL_strobe   ' auf 0 setzen inaktiv
                    rdlong  temp1,    db1A          ' 24Bit adresse holen
                    shr     temp1,    #16           ' Bit's um 16 stellen nach unten Verschieben
                    andn    outa,     M_16Bit      ' BUS auf $0000 setzen
                    or      outa,     temp1         ' einzen setzen
                    or      outa,     ADRH_strobe   ' auf 1 setzen aktiv
                    nop
                    andn    outa,     ADRH_strobe   ' auf 0 setzen inaktiv
SRAM_adr_ret        ret
' ======================================================================================
' Initialized data
' ======================================================================================
bootA               long  $7FFC                     ' 

statusA             long  $7FF8                     ' Statuszelle IO-Controll
db1A                long  $7FF4                     ' Adresse (Zeiger)
db2A                long  $7FF0                     ' Daten (Byte, Word und Long)
status              long  1
command             long  1
cogidm              long  1

'  **************************************************************************************
'                     SRAM Interface  
'  **************************************************************************************
ADRL_strobe         long  %00000000_01000000_00000000_00000000
ADRH_strobe         long  %00000000_10000000_00000000_00000000
  
MREQ_WR             long  %00000110_00000000_00000000_00000000    '/MREQ /WR
MREQ_RD             long  %00000101_00000000_00000000_00000000    '/MREQ /RD

SRAM_io             long  %00000111_00000000_11111111_11111111

BUS_D_io            long  %00001011_00000000_11111111_11111111
BUS_C_io            long  %00001011_00000001_11111111_11111111

M_16Bit             long  $0000FFFF
M_17Bit             long  $0001FFFF
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
kuroneko
Beiträge: 202
Registriert: Sa 22. Okt 2011, 13:05
Wohnort: FN, Germany

Re: Propeller in 19"

Beitrag von kuroneko »

PIC18F2550 hat geschrieben:

Code: Alles auswählen

SPRV                call    #dcall                  ' $00 (X) COGIDM 1..7  IO nichts Machen
                    call    #dcall                  ' $08 (X) COGIDM 8     IO nichts Machen
' ======================================================================================
' dummy CALL
' ======================================================================================
' Commando IO nichts löschen 
dCall
dCall_ret           ret
' ======================================================================================
(.) Quellcod fehlt noch
(A) Quellcod eingefügt aber noch nicht getestet
(X) Quellcode getestet IO
Das getestet nehm' ich Dir nicht ab.
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller in 19"

Beitrag von PIC18F2550 »

:?:
kuroneko hat geschrieben:Das getestet nehm' ich Dir nicht ab.
in welchem zusammenhang ? läuft er nicht über das Ret?
Habe bei mir gerade die zwei CALLs durch NOPs ersetzt Die wahren eh nur zu Testzwecke vorhanden.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
kuroneko
Beiträge: 202
Registriert: Sa 22. Okt 2011, 13:05
Wohnort: FN, Germany

Re: Propeller in 19"

Beitrag von kuroneko »

call modifiziert ret, da Dein Unterprogramm aber leer ist folgt ret direkt auf call. Selbstmodifizierender Code braucht aber mindestens einen Befehl dazwischen ...
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller in 19"

Beitrag von PIC18F2550 »

:shock: Wieder was dazu gelernt

Das könnte das nicht funktionieren schon etwas erklähren.

Habe erstmal bei den Leeren CALLs ein NOP eingebaut.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller in 19"

Beitrag von PIC18F2550 »

Der Fehler warum der PASM-Teil nicht funktionierte war meine schussligkeit.
In der Konstante SRAM_io fehlten die Pinns für die beiden Adresslatches. :x

Code: Alles auswählen

SRAM_io             long  %00000111_11000000_11111111_11111111
Das ist der ganze SPIN-Block um in den SRAM zu schreiben

Code: Alles auswählen

  io.start_io(0)
  repeat 10000   ' warten bis das der IO-COG gestartet ist
  adr:=0
  repeat 16
    long[$7FF4]:=adr
    long[$7FF0]:=data
    long[$7FF8]:=$48
    adr++
Später wird daraus

Code: Alles auswählen

  repeat while io.start_io(0) > 0   ' warten bis das der IO-COG gestartet ist
                                    ' (irgendwo habe ich schonmal so was gesehen weis nicht ob das so funktioniert)
  adr:=0
  repeat 16
    SRAM_write(comando,adresse,data)
    adr++
Adresse, Daten, CODID+1
Adresse, Daten, CODID+1
So jetzt geht es erstmal mit dem lesen weiter.
Schließlich will ich ja den SPIN-Teil vom IO-Interface Abkoppeln.
for maximum speet
Schreibtest 15sec for 512kx16Bit ~1Mbit :shock:
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller in 19"

Beitrag von PIC18F2550 »

So die sache mit dem SPIN und dem SRAM (16Bit) hatt sich erledigt :DAUMENHOCH
Dieser Teil vom PASM geht schonmal.

Code: Alles auswählen

' ein Word auf dem SRAM schreiben
    long[$7FF4]:=adr
    long[$7FF0]:=data_w
    long[$7FF8]:=$38

' ein Word vom SRAM lesen 
    long[$7FF4]:=adr
    long[$7FF8]:=$30
    data_w:=long[$7FF0]
Jetzt muss ich mich erstmal um die Busroutinen kümmern.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Antworten