čtení dat v bascomu

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

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
denny_ul
Příspěvky: 30
Registrován: 14 zář 2015, 00:00
Bydliště: Ústí n.L.

čtení dat v bascomu

#1 Příspěvek od denny_ul »

Chtěl bych vyčíst ze seriové linky 20 bajtů a následně je zobrazit na displeji (v kódu není konfig displeje).
Bude tohle fungovat?

Kód: Vybrat vše

'pokus prenosu po seriove lince
$regfile = "attiny2313a.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 8
$framesize = 16
$baud = 9600

Dim X As Byte
Dim Y As Byte
Dim A As Word
Dim B As Word

Do

For A = 1 To 20
Serin X , 1 , D , 0 , 9600 , 0 , 8 , 1
Writeeeprom X , A
Next

For A = 1 To 20
Readeeprom Y , A
Locate 1 , 1
Lcd Y
Wait 1
Next

Loop
End
Uživatelský avatar
Ruprecht
Příspěvky: 1494
Registrován: 28 zář 2005, 00:00
Bydliště: ZČ + JM

#2 Příspěvek od Ruprecht »

Zkus to spíš takhle:

Kód: Vybrat vše

Dim X As Byte, A as byte

Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 1
Config Serialin = Buffered , Size = 16
Enable Interrupts


X = Ischarwaiting()
   If X = 1 Then
      A = Inkey()
...

Když přijde znak, Ischarwaiting=1, takže se znak načte do "A".
Pokud nepoužiješ "Ischarwaiting", budou se načítat nuly dokud nepřijde nějaký znak.

Vřele doporučuju použít HW UART a hodinový krystal.
99% problémů sériové komunikace je způsobeno špatnou rychlostí!!!!!!!!!
p.s. rychlost 9600b při 8MHz má chybu 0,2%, což je v pohodě (viz str.136 datasheetu 2313). Ale pokud použiješ vnitřní RC 8MHz, může kmitočet courat a můžou občas vypadávat znaky nebo přijdou "zdeformované"

Writeeeprom není dobrý nápad, eeprom má omezený počet zápisů na asi 100.000 (pokud zapíšeš 100x za sekundu, za 1000 sekund = 16 minut máš po buňce v eepromce)
Když promluví, tak buď kňučí, nebo lže.
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#3 Příspěvek od ZdenekHQ »

Pokud je ta EEPROM externí, dá se použít FRAM.
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Uživatelský avatar
denny_ul
Příspěvky: 30
Registrován: 14 zář 2015, 00:00
Bydliště: Ústí n.L.

#4 Příspěvek od denny_ul »

Tu epromku jsem chtěl použít na to, abych někam uložil těch 20 načtených hodnot a pak mohl přečíst třeba jen 4. a 5. v pořadí z těch 20-ti, nebo jde to někam uložit jako pole a pak to číst z něj?

Něco jako:

Kód: Vybrat vše

For A=1 to 20
ulož X(A)
Next
Print X(4)
Print X(5)


Jenže nevím jestli je příkaz, který by fungoval jako to co jsem tady pojmenoval "ulož X(A)"
Uživatelský avatar
Ruprecht
Příspěvky: 1494
Registrován: 28 zář 2005, 00:00
Bydliště: ZČ + JM

#5 Příspěvek od Ruprecht »

Pokud se ty načtené byty mají jen zobrazovat, použij RAM (dim automaticky deklaruje proměnné v RAM):
Dim A as byte
nebo
Dim A(20) as byte (pokud to chceš jako pole dvaceti bytů)
Eprom slouží většinou jen pro uchování dat i po vypnutí, z RAM se data ztratí.
Když promluví, tak buď kňučí, nebo lže.
Odpovědět

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