Stránka 1 z 2

převod pbp do hex

Napsal: 12 pro 2010, 11:12
od fery25
Ahoj,
Chtěl jsem postavit teploměr s pic12f629 a lcd z nokie 3110 podle návodu na: http://www.ivica-novakovic.from.hr/Noki ... ometar.htm . Autor přiložil i zdrojový kod, ale s příponou *.pbp. Chtěl bych změnit vzhled displeje, ale v MPlab jej nedokážu přeložit. Zkusil jsem přepsat příponu na *.asm , ale nic. Poradíte v jakém programu by šel tenhle zdrojový kód přeložit do hex.

Napsal: 12 pro 2010, 11:49
od mety
Pravdepodobne to bude PICBASIC PRO Compiler , ale niesom si isty.
Skus ho niekde na nete stiahnuť a potom tie subory v tom otvoriť.

Napsal: 12 pro 2010, 13:51
od fery25
Tak jo. Stahnul jsem "MicroCode Studio" včetně "PicBasic Pro compiler". A vypadá to že by si s tímhle kódem poradil, jenže je to pouze demo a ta zvládne pouze 31řádků, navíc je to jen pro PIC16... Neznáte někdo odkaz na jiný program?
Díky

Napsal: 12 pro 2010, 18:40
od majsi
Este Ti ostava jedna moznost. Cele to prepisat do svojho jazyka. Co som pozeral tak ten kod je celkom zrozumitelne napisany :wink:

Napsal: 13 pro 2010, 12:12
od fery25
O to se teď snažím. V Basicu je to jednoducé. Došel jsem až k části:

PrintDataLcd: for x = 1 to 8 ' ispis na Lcd
SDIN = LcdReg.7
LcdReg = LcdReg << 1
SCK = 1
SCK = 0
next x
D_C = 1
return
Pomohl bys mi přložit do assembleru jak na pin SDIN vyvést 8bitů z proměnné LcdReg?

Napsal: 13 pro 2010, 14:15
od majsi
Fuu teraz si ma dostal :D s asm pre pic som dlho nerobil. Ale urcite nato prides je to jednoduchy cyklus.

movlw 0
movwf x

cyc:
incf x, 1
btfsc x, 3
goto end
btfsc LcdReg, x
goto set_1
bcf PORTB, 4
goto pok

set_1:
bsf PORTB, 4
pok:
movlw 1
movwf SCK
movlw 0
movwf SCK
goto cyc

end:

No snad som to velmi nepokazil :wink:
btfsc LcdReg, x toto si niesom isty ci je mozne to takto zapisat.

Napsal: 13 pro 2010, 15:13
od fery25
když vynecham cyklus, šlo by to i takhle?

bsf SCK
btfsc LcdReg,7
bsf SDIN
bcf SDIN
bcf SCK
bsf SCK
btfsc LcdReg,6
bsf SDIN
bcf SDIN
bcf SCK

a tak pro všech osm bitů 7,6,5...0 ??? sice žádná paráda, ale co.
Dík za tvůj čas.

Napsal: 13 pro 2010, 15:52
od AB1
Dá se to přeložit pěkně příkaz po příkazu.

Kód: Vybrat vše

Ramstart  equ    0ch             ; začátek RAM pro PIC16F84 
Lcdreg    equ    Ramstart+1      ;
Counter   equ    Lcdreg+1       ;
  
#define   SDIN   PORTB,0
#define   SCK    PORTB,1
#define   D_C    PORTB,2


PrintDataLcd:
;for x = 1 to 8   
      movlw    8
      movwf    Counter
loop:
;SDIN = LcdReg.7
      bcf      SDIN
      btfsc    Lcdreg,7
      bsf      SDIN
;LcdReg = LcdReg << 1
      rlf      Lcdreg,1
;SCK = 1      
      bsf      SCK
;SCK = 0
      bcf      SCK
;next x
      decfsz   Counter,1
      goto     loop
;D_C = 1
      bsf      D_C
      return

Napsal: 13 pro 2010, 16:02
od majsi
fery25 píše:když vynecham cyklus, šlo by to i takhle?

bsf SCK
btfsc LcdReg,7
bsf SDIN
bcf SDIN
bcf SCK
bsf SCK
btfsc LcdReg,6
bsf SDIN
bcf SDIN
bcf SCK

a tak pro všech osm bitů 7,6,5...0 ??? sice žádná paráda, ale co.
Dík za tvůj čas.
bude to fungovat. nemas prehodene
bcf SCK
bsf SCK
???

Napsal: 13 pro 2010, 17:45
od AB1

Kód: Vybrat vše

  btfsc LcdReg,7
  bsf SDIN
  bcf SDIN 
Takto to nejde, bit SDIN by byl vždy 0, protože
1. Pokud je LcdReg,7=0, skočí na řádek "bcf SDIN".
2. Pokud je LcdReg,7=1, jde na řádek "bsf SDIN" a pak na "bcf SDIN".

Napsal: 13 pro 2010, 20:40
od fery25
Zamýšlel jsem to tak, že:
SCK použiju jako hodinový signál pro lcd, tedy do času SCK=1 + SCK=0 se musí vejít 1.bit takže myslím, že přehozené nejsou, alespoň doufám.

AB1: "Takto to nejde, bit SDIN by byl vždy 0, protože
1. Pokud je LcdReg,7=0, skočí na řádek "bcf SDIN".
2. Pokud je LcdReg,7=1, jde na řádek "bsf SDIN" a pak na "bcf SDIN"

No ale na 1/4 taktu se na SDIN objeví log.1 Myslíš, že je to příliš krátká doba? Mám přidat NOP?

Napsal: 13 pro 2010, 22:23
od majsi
ono fungovat to moze. len to nieje dobry navyk. treba si pozriet datasheet a casy ktore display potrebuje. ide o to ze ak je ten display dost rychli tak ti pri nahodeni SCK precita SDIN ktory je ale vzdy 0. az po par cykloch sa nastavi na 1 a potom sa v zapati zhodi na 0. cize si display bude citat vzdy 00000000.

inak AB1 to napisal pekne :wink:

Napsal: 13 pro 2010, 23:13
od AB1
No ale na 1/4 taktu se na SDIN objeví log.1 Myslíš, že je to příliš krátká doba? Mám přidat NOP?
To je nesmysl.
Data se přenesou při sestupné hraně SCK. A v tom okamžiku mají hodnotu 0. Co bylo předtím, to už odnés čas.

Ostatně není zvykem měnit data během SCK pulsu.
Běžnější je způsob jako v originálním kódu.

Napsal: 14 pro 2010, 07:45
od fery25
Díky
To jsem nevěděl, myslel jsem, že stačí během taktu přivést log.1 a bit bude bán jako 1. Proto jsem se snažil před ukončením taktu změnit SDIN zase na 0, aby náhodou nepřesáhl do dalšího taktu. Předělám.
Ještě jednou dík.

Re: převod pbp do hex

Napsal: 21 led 2011, 19:46
od JG
Zdravim,
ak o to mas este zaujem, tak dekodovat HEX kod sa da v ktoromkolvek MPLAB-e.
Temp1Lcd12F675-Ds18B20.txt - takto to vyzera
Temp2Lcd12F675-Ds18B20.asm - takto to musis upravit aby ti to zobral MPLAB pre editaciu.
Ak este mas zaujem upravit displej, mozem strucne popisat kde to treba hladat. Zaciatok obrazcov je v druhej polovici EEPROM, pokracovanie v prikazoch RETLW ... . Niektore znaky sa menia cez systemove premenne podla teploty +, -, a nad, asi 50stupnov.
Sposob vykreslovania displeja je vzdy po 8 riadkoch vzdy stlpec 8 bit z hora dole. Treba si pozriet katalogovy list.
Prave na tom tiez pracujem, ale pre displej 96x64 bodov. Dufam ze to budem mat hotove do dvoch mesiacov. Chcem vacsi ciselny udaj, a pripadne 2 snimace. Potom to zverejnim.
Prajem vela zdaru.