převod pbp do hex

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
fery25
Příspěvky: 11
Registrován: 12 pro 2010, 01:00

převod pbp do hex

#1 Příspěvek 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.

Uživatelský avatar
mety
Příspěvky: 634
Registrován: 06 bře 2005, 01:00
Bydliště: Planeta Zem

#2 Příspěvek 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ť.

Uživatelský avatar
fery25
Příspěvky: 11
Registrován: 12 pro 2010, 01:00

#3 Příspěvek 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

Uživatelský avatar
majsi
Příspěvky: 51
Registrován: 23 led 2010, 01:00

#4 Příspěvek od majsi »

Este Ti ostava jedna moznost. Cele to prepisat do svojho jazyka. Co som pozeral tak ten kod je celkom zrozumitelne napisany :wink:

Uživatelský avatar
fery25
Příspěvky: 11
Registrován: 12 pro 2010, 01:00

#5 Příspěvek 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?

Uživatelský avatar
majsi
Příspěvky: 51
Registrován: 23 led 2010, 01:00

#6 Příspěvek 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.

Uživatelský avatar
fery25
Příspěvky: 11
Registrován: 12 pro 2010, 01:00

#7 Příspěvek 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.

Uživatelský avatar
AB1
Příspěvky: 312
Registrován: 23 lis 2009, 01:00

#8 Příspěvek 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

Uživatelský avatar
majsi
Příspěvky: 51
Registrován: 23 led 2010, 01:00

#9 Příspěvek 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
???

Uživatelský avatar
AB1
Příspěvky: 312
Registrován: 23 lis 2009, 01:00

#10 Příspěvek 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".

Uživatelský avatar
fery25
Příspěvky: 11
Registrován: 12 pro 2010, 01:00

#11 Příspěvek 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?

Uživatelský avatar
majsi
Příspěvky: 51
Registrován: 23 led 2010, 01:00

#12 Příspěvek 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:

Uživatelský avatar
AB1
Příspěvky: 312
Registrován: 23 lis 2009, 01:00

#13 Příspěvek 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.

Uživatelský avatar
fery25
Příspěvky: 11
Registrován: 12 pro 2010, 01:00

#14 Příspěvek 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.

Uživatelský avatar
JG
Příspěvky: 7
Registrován: 15 lis 2010, 01:00

Re: převod pbp do hex

#15 Příspěvek 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.
Přílohy
Temp2Lcd12F675-Ds18B20.asm
(23 KiB) Staženo 99 x
Temp1Lcd12F675-Ds18B20.txt
(32.03 KiB) Staženo 96 x

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“