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
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller in 19"

Beitrag von PIC18F2550 »

Das ist das Grundgerüst um Daten(0+16Bit) und Commandos(1+16Bit) auf dem BUS zu Bringen.
Beide Commandos sind grundsätzlich 17Bit breit es unterscheidet sie nur das 17. Bit

Code: Alles auswählen

' ======================================================================================
' SUBROUTINEN : word auf BUS schreiben
' ======================================================================================
BUS_write_w         waitpeq IORQ_QT,  IORQ_QT       ' warten bis QT == 1
                    or      dira,     IORQ_C_io_w   ' BUS auf Ausgabe schalten
                    rdlong  temp1,    db2A          ' 16Bit Word holen
                    and     temp1,    M_16Bit       ' 16Bit auswählen
                    jmp     #BUS_write_w_1
' ======================================================================================
' SUBROUTINEN : COMANDO auf BUS schreiben
' ======================================================================================
BUS_write_c         waitpeq IORQ_QT,  IORQ_QT       ' warten bis QT == 1
                    or      dira,     IORQ_C_io_w   ' BUS auf Ausgabe schalten
                    rdlong  temp1,    db2A          ' 16Bit Word holen
                    and     temp1,    M_17Bit       ' 16Bit auswählen
BUS_write_w_1       andn    outa,     M_17Bit       ' BUS auf $0000 setzen
                    or      outa,     temp1         ' einzen setzen
                    andn    outa,     IORQ_WR       ' Schreibbefehl ausgeben
                    waitpeq zero,     IORQ_QT       ' warten bis QT == 0
                    or      outa,     IORQ_WR       ' Schreibbefehl zurücknehmen
                    waitpeq IORQ_QT,  IORQ_QT       ' warten bis QT == 1
                    andn    dira,     IORQ_C_io_w   ' BUS Ausgabe aufheben
                    wrlong  cogidm,   statusA       ' Commando löschen                             
                    andn    outa,     M_17Bit       ' BUS auf $0000 setzen
BUS_write_w_ret
BUS_write_c_ret     ret                  
:( jetzt breuchte ich langsam mal meine VGA-Karte :x
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

                    rdlong  temp1,    db2A          ' 16Bit Word holen
                    and     temp1,    M_16Bit       ' 16Bit auswählen
Warum nimmst Du nicht einfach rdword? Oder ist es in Wirklichkeit ein verschobener 32bit Wert? Was nichts daran aendert das selbiger schon maskiert sein sollte.

Und ich wuerde den Wert for dem waitpxx lesen.
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller in 19"

Beitrag von PIC18F2550 »

Wie immer hast du recht.
Ich hab mich von der Festlegung das 4 long Werte im hRAM für die Übertragung der Parrameter zuszändig sind blenden lassen.

Das vorher lesen minimiert natürlich die Busauslastung und währe da auch angebracht.

Danke was würde ich nur ohne Dich machen. ;)
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: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller in 19"

Beitrag von PIC18F2550 »

Ohne VGA ist's mühselig was zu stricken. :(

Also hab ich mal ein bisschen mit dem PCA9555D rumgespielt.

Als Treiber wurde natürlich wieder ein PASM model assimiliert. :mrgreen:

Der 1. Test bestand darin die Config einzulesen.

Erstmal mit SPIN angesprochen und kein Blockmodus.

Code: Alles auswählen

CON
  scl = 28
  sda = 29
  i2c_freq = 100_000

OBJ
  i2c : "I2C"
  pst : "PST"

pub main|adr,sadr,a,mee,zei,com,wer, ack
  pst.start(115200)
  pst.Clear(0)
  pst.Position(0,0)
  pst.Str(@T000)
  pst.Position(0,1)
  pst.hex(i2c.init(scl,sda,100_000),2)
    repeat
    pst.Position(0,1)
    ack := 0
    repeat until ack == 1        
      i2c.start          
      ack := i2c.write_byte($40)  
    ack := i2c.write_byte(1)
    ack := 0
    repeat until ack == 1        
      i2c.start          
      ack := i2c.write_byte($41)  
    pst.bin(i2c.read_byte(FALSE),8)
    i2c.stop

    pst.Str(@T003)
    ack := 0
    repeat until ack == 1        
      i2c.start          
      ack := i2c.write_byte($40)  
    ack := i2c.write_byte(0)
    ack := 0
    repeat until ack == 1        
      i2c.start          
      ack := i2c.write_byte($41)  
    pst.bin(i2c.read_byte(FALSE),8)
    i2c.stop
    repeat 3000
Bildschirmfoto-SimpleIDE Terminal-2.png
Bildschirmfoto-SimpleIDE Terminal-2.png (11.63 KiB) 10064 mal betrachtet
von links nach rechts
3 Bit für die Treibernummer wenn eine Karte mehrfach verbaut wurde. Karte 0 bis 7
8 Bit Nummer zur Karten identifizierung 0-255
3 Bit Steckplatznummer wird nur für den Bootloader benötigt
2 Bit Ausgang für rot/grün LED werden gegen 0V geschaltet daher hier als 1

Jetzt muss ich das Prinzip in PASM umschreiben mal sehen wie das klappt.
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: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller in 19"

Beitrag von PIC18F2550 »

Ich konnte es nicht lassen und habe gleich mal noch die Ansteuerung der LED's ausprobiert und Es geht. :mrgreen:

Code: Alles auswählen

' config
  ack := 0
  repeat until ack == 1        
    i2c.start          
    ack := i2c.write_byte($40)  
  ack := i2c.write_byte(6)
  ack := i2c.write_byte(%11111100)
  i2c.stop

' schreiben
  ack := 0
  repeat until ack == 1        
    i2c.start          
    ack := i2c.write_byte($40)  
  ack := i2c.write_byte(2)
  ack := i2c.write_byte(%00000011)
  i2c.stop
<EDIT> So die Ansteuerung der LEDs ist jetzt auch in PASM.</EDIT>
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: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller in 19"

Beitrag von PIC18F2550 »

Zuletzt geändert von PIC18F2550 am So 20. Jul 2014, 16:59, 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: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller in 19"

Beitrag von PIC18F2550 »

Sie Commandoauswertung wurde um eine Fehlererkennung erweitert.
Alle Befehle die größer als $1F sind bewirken das Stoppen der COG aktivitäten. (zur Fehlersuche)
Gleichzeitig signalisiert die rote LED an der Karte durch einen impuls (1/4) den Fehler.

Code: Alles auswählen

0530(0146)             | There are 170 ($0AA) Longs left in the cog
Zuletzt geändert von PIC18F2550 am So 20. Jul 2014, 21:33, 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: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller in 19"

Beitrag von PIC18F2550 »

Das Auslesen der Karten information über den PCA9555D ist erfolgreich verlaufen. :SCHREIEN
Funktionsaufruf in SPIN

Code: Alles auswählen

PUB read_config(a):b
  byte[$7FFF]:=$17                      'Testvorbereitung
  repeat until byte[$7FFF]==$0
  b:=long[$7FF8]
So sieht die dementsprechende Routine in PASM aus

Code: Alles auswählen

' ======================================================================================
' SUBROUTINEN : I²C PCA9555 Config von Karte lesen
' ======================================================================================
I2C_PCA_read_c      call      #I2C_start_c
                    mov       data,     I2C_PCA9555D_w  ' write Adresse
I2C_PCA_read_c_M1   call      #I2C_write
                    cmp       ack_,     #$1         wz  '
              if_nz jmp       #I2C_PCA_read_c_M1
                    mov       data,     #$1             ' write To outport
I2C_PCA_read_c_M2   call      #I2C_write
                    cmp       ack_,     #$1         wz  '
              if_nz jmp       #I2C_PCA_read_c_M2
                    call      #I2C_start_c
                    mov       data,     I2C_PCA9555D_r  ' read Adresse
I2C_PCA_read_c_M3   call      #I2C_write
                    cmp       ack_,     #$1         wz  '
              if_nz jmp       #I2C_PCA_read_c_M3
                    or        flags_,   #ack_flag
                    call      #I2C_read
                    shl       data,     #$8
                    mov       temp1,    data
                    andn      flags_,   #ack_flag
                    call      #I2C_read
                    add       data,     temp1
                    call      #I2C_stop_c
                    wrlong    data,     db1A
I2C_PCA_read_c_ret  ret
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: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller in 19"

Beitrag von PIC18F2550 »

Der Start des IO_Moduls wurde um folgende Funktionen erweitert:
- Rücksetzen der LED Anzeige und aktivierung der grünen LED zur Bereitschaftsanzeige

Code: Alles auswählen

' ======================================================================================
' ROUTINE : Initalisierung
' ======================================================================================
io_driver           cogid   cogidm
                    add     cogidm,     #$1
                    wrbyte  cogidm,     cog             ' COGID Speichern
                    call    #I2C_PCA_init
                    call    #I2C_PCA_ledrg_00_c
                    call    #I2C_PCA_ledrg_x1_c
- Einfügen einer I2C-Bus-Rest Funktion einfachhalber bei der PCA9555D initalisierung.

Code: Alles auswählen

' ======================================================================================
' SUBROUTINEN : I²C PCA9555 initalisieren
' ======================================================================================
I2C_PCA_init        mov       q_freq,   I2C_400
                    mov       temp1,    #$9             ' 9X stop um alle Busteilnehmer zu reseten
I2C_PCA_init_1      call      #I2C_stop_c
                    djnz      temp1,    #I2C_PCA_init_1                   
                    call      #I2C_start_c
                    mov       data,     I2C_PCA9555D_w  ' write Adresse
I2C_PCA_init_2      call      #I2C_write
                    cmp       ack_,     #$1         wz  '
              if_nz jmp       #I2C_PCA_init_2
                    mov       data,     #$6             ' write To Controlregister IN/OUT Mask
                    call      #I2C_write
                    mov       data,     #%11111100      ' write 6xIN/2xOUT Mask
                    call      #I2C_write
                    call      #I2C_stop_c
I2C_PCA_init_ret    ret

Code: Alles auswählen

<EDIT>veraltet</EDIT>
:mrgreen: Die VGA ist DA
2014-07-20_18-01-47_557.jpg
Zuletzt geändert von PIC18F2550 am Di 19. Aug 2014, 16:24, 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: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: Propeller in 19"

Beitrag von PIC18F2550 »

Im Garten kommen immer wieder neue Gedanken wie Unkraut.

Warum nicht gleich die Errorroutine zur Fehleranzeige Nutzen.

Code: Alles auswählen

' ======================================================================================
' ERROR-Codes
' ======================================================================================
' Fehler nichts löschen nur LED Meldung
ERROR_              long  0
ERROR_3_c           add     ERROR_,   #$1             ' Wordformat Adressfehler(Ungerade Adresse)
ERROR_2_c           add     ERROR_,   #$1             ' Befehl indexüberschreitung $0..$1F
ERROR_1_c           add     ERROR_,   #$1             ' Reservebefehl
ERROR_LOOP          mov     temp2,    ERROR_
                    call    #I2C_PCA_ledrg_00_c
                    mov     temp1,    #$1
                    shl     temp1,    #24
ERROR_c_M1          djnz    temp1,    #ERROR_c_M1   wz
ERROR_c_M2          call    #I2C_PCA_ledrg_1x_c                    
                    mov     temp1,    #$1
                    shl     temp1,    #21
ERROR_c_M3          djnz    temp1,    #ERROR_c_M3   wz
                    call    #I2C_PCA_ledrg_00_c
                    mov     temp1,    #$1
                    shl     temp1,    #22
ERROR_c_M4          djnz    temp1,    #ERROR_c_M4   wz
                    djnz    temp2,    #ERROR_c_M2   wz
                    jmp     #ERROR_LOOP               ' BEI FEHLER SYSTEM ZUR ANALYSE STOPPEN
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