Soros port (rs232)

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Kód: Egész kijelölése

   $regfile = "m128def.dat"
   $crystal = 14745600

   $hwstack = 100
   $swstack = 100
   $framesize = 100

   Dim Bc As Byte
   Dim Be(10) As Byte
   Dim D As Byte
   Dim Buffer As String * 8

   Dim Fut As Byte

   Config Pinf.0 = Output
   Led Alias Portf.0

'   Config Pind.2 = Input                                    'uart2 rxd
'  nem, kell

   Config Lcd = 20 * 4
   Config Lcdpin = Pin , Db4 = Porta.6 , Db5 = Porta.5 , Db6 = Porta.4 , Db7 = Porta.3 , E = Portc.7 , Rs = Portc.6

initlcd
   Cls
   Cursor Off

'   Config Com2 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1, Databits = 8 , Clockpol = 0
'nem kell, csak ha spec beallitas szukseges....

$baud1=19200
open "COM2" as random as #2
config serialin=buffered, size= 80, bytematch=all
'minden bejovo karaktert jegyezzen (ne legyen adatvesztes), es bejovetelkor a Serial1ByteReceived rutinra ugrik.

'Wait 1'ez minek?

Bc = 0
Fut = 0

'On Urxc1 Uart2
'Enable Urxc1
'ez a srial bufferrel megoldva

Enable Interrupts

Do

    If Bc = 8 Then

'               Disable Serial'EZ MINEK????? Ami ezido alatt jon, az elveszett! Ezert bufferelek....
               Bc = 0
               Set Led

        Upperline
        Lcd Fut
        Incr Fut

               Reset Led

'     Enable Serial

  End If
Loop

End

Serial1ByteReceived:
If Bc < 8 Then
     Incr Bc
      Be(bc) = inkey(#2)
      Buffer = Buffer + be(bc)
End If
Return
Remelem nem irtamel semmit, fejbol ment es a M128 2. COM portjara....
Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00

Hozzászólás Szerző: dummy »

Valami nagyon nem stimmel. (Volt pár elírás, ez-az, de kijavítottam). A "Fut" változót továbbra sem kezeli jól, ráadásul ez a megoldás sokkal rosszabb, mint az előző volt. Ugyanis 100-ból legfeljebb egyszer veszi úgy az adatokat, hogy azok egyezzenek a küldött adatokkal. Rengeteg a hibázás.
Kezdek kiábrándulni az uart-ból. Az lesz a vége, hogy írok egy saját rutint, hogy átvegyem ezt a pár byte-ot a másik prociból, mert ez valamiért nem járható út. Van egy csomó felesleges processzorláb, párhuzamos adatátvitellel meg lehet oldani a problémát. :)

Annyit már észrevettem, hogy a proci akkor "hülyül" meg, ha az uart-ot interrupt alapon kezelem. Valamiért megbolondul a megszakításoktól. Hogy ez most a Bascom bugja, vagy a proci hibája, azt nem tudom. Mindenesetre elgondolkodtató a jövőre nézve. :?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Hat a bufferelt vetelnel semmi nem stabilabb....
Nalam >40 berendezesnel tokeletesen megy....

Szabvanyos jeled jon ki?

Az AVR UART ~0,3% hibat enged meg. A PC USB-soros átalakítóval 1% eltérést, RS232 alaplapi ~3% sebességbeli eltérést! nem ebbe futsz bele?

A M128-ad igaz át van állítva M103 módból M128 módba?

A másik proci hogy küldi? lehet tudni? ott nincs a névleges sorosportról eltérés? Én meglesném a "hangkártyás oszcilloszkóppal".
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Nem csak a Fut kiírásával van a hiba? Nem törlöd le a felesleges karaktereket!
255 után 0 következi de az _55 ott marad az LCD-n?
Betennék elé 1 : If Fut = 0 Then Cls
Vagy igy:

Kód: Egész kijelölése

Upperline
        Lcd Fut ; "  "
  
:idea:
A hozzászólást 4 alkalommal szerkesztették, utoljára kapu48 2009. május 1. péntek, 8:30-kor.
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

Dummy ne add fel!
Nekem is van pár dolog már ami uart-al megy
és kutya baja még nagyobb sebbességen is.
Tán esetleg a paneleden vagy közelében valami
interferál?
Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00

Hozzászólás Szerző: dummy »

A másik AVR Printbin-nel küldi a bájtokat, ha ezt PC-s terminálra küldöm, nem az M128-ra, hibátlanul megjelennek az adatok. A küldő és a fogadó proci is kvarcról megy (a másik 7,3728MHz-en ketyeg, ott is 19200 baud-os a sebesség).
A két panel árnyékolt, kb. 3 cm hosszú kábellel van összekötve, mindkét panelen a "telifóliás" földet alkalmazom, a tápágakban mindenhol ott vannak a hidegítő kondik, ahogy kell, a tápfesz amúgy is stabilizált.

Bár, elnézve az adatlapokat kizárt, de már nem tudok másra gondolni, mint arra, hogy a küldő AVR 3,3V-ról jár, az M128 5V-ról. Kevés lenne az M128 UART-jának a 3,3V-os jel?! Az adatlap szerint nem.

Továbbra is zavar, hogy megszakítás nélkül nincs ez a "Fut"-os hiba, megszakítással meg rögtön megkergül a változó.

Amúgy most nem érdekes, hogy ha előről kezdi a számlálást, ott marad az "55" a kijelzőn, ez a dolog csak a tesztidőszakra kell, hogy ellenőrizzem az adatfogadást.

Tényleg valamilyen másféle megoldáson töröm a fejem, mert az adatkapcsolat egyirányú, csak az M128 felé mennének a bájtok. Miért nem tudják alapból az I2C-t az AVR-ek, sokszor jó lenne, azzal még sosem volt semmilyen problémám. Na, kiveszem a kezem a biliből... :)

Ja, az M128 természetesen nem M103 módban megy, a fusebitekkel már egészen jól elvagyok. :)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Miért így van bekötve az LCD?:
Config Lcdpin = Pin , Db4 = Porta.6 , Db5 = Porta.5 , Db6 = Porta.4 , Db7 = Porta.3 , E = Portc.7 , Rs = Portc.6

Szerintem így lenne helyes:
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portc.7 , Rs = Portc.6
:roll:
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

Hát akkor 1Wire..Vagy serin serout...
Esetleg shiftin-shiftout ..Azt hogy egyik avr-jelez az int-en a másiknak
ugysem nagyon tudod kihagyni.INT alatt amúgy elég sok mindent
nem lehet.Mint ahogy Wait alatt sem.De bascomnál lehet venni
i2c master slave libet is.(Nekem nincs tehát tapasztalat 0.De amit eddig
én megvettem azok elég kulturáltan müködnek.)I2C az amugy is egy
Nagyon jó adatátvitel a clock miatt.
Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00

Hozzászólás Szerző: dummy »

kapu48 írta:Miért így van bekötve az LCD?:
Config Lcdpin = Pin , Db4 = Porta.6 , Db5 = Porta.5 , Db6 = Porta.4 , Db7 = Porta.3 , E = Portc.7 , Rs = Portc.6

Szerintem így lenne helyes:
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portc.7 , Rs = Portc.6
:roll:
Teljesen mindegy, hogy az lcd kivezetéseit az adott processzor melyik lábára kötöd! Az a lényeg, hogy jól add meg ezeket a config lcdpin-ben.

A Db4...Db7 jelölésnek nem a processzorhoz, hanem az lcd adatvezetékeihez van köze. Ezeket kell hozzárendelni a proci lábaihoz.
Hogy miért így alakult a bekötés? Mert így volt a lehető legegyszerűbb a nyákterv. Egyébként az lcd-vel semmi baj. :)
Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00

Hozzászólás Szerző: dummy »

herc1234 írta:Hát akkor 1Wire..Vagy serin serout...
Esetleg shiftin-shiftout ..Azt hogy egyik avr-jelez az int-en a másiknak
ugysem nagyon tudod kihagyni.INT alatt amúgy elég sok mindent
nem lehet.Mint ahogy Wait alatt sem.De bascomnál lehet venni
i2c master slave libet is.(Nekem nincs tehát tapasztalat 0.De amit eddig
én megvettem azok elég kulturáltan müködnek.)I2C az amugy is egy
Nagyon jó adatátvitel a clock miatt.
Én valahogy jobban hiszek az olyan adatátvitelben, ahol van egy független órajel is. Ilyen az I2C, az SPI. Ezekkel még sosem volt bajom. Az 1-wire nem olyan elterjedt, slave lib-et meg nem akarok venni. Egyszerű soros adatátvitelhez elég lenne három vezeték (Enable, Clock, Data). Ha végképp nem boldogulok, akkor ez marad.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

SPI van master/slave is a Bascomban.
I2C master alapban, I2Cslave külön lib-ként (~10 Eur).
1W - ez nem igazan erre valo, amire neked kell....
Rx/Tx ha hibázik, ott gond van. én a lábat egy lehúzó 10K-s ellenállással a GNDre kötném. Az adó oldalon lehet hogy lebeg....
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Te csak azt hiszed, hogy mindegy!
Ahogy én javasoltam jóval egyszerűbb kiküldeni a 2*4bitet. Csak 1 4*shiftet kel beiktatni.
Míg nálad átkel forgatni az egész byteot a fordított bekötés miatt. Meg jobbról – balról középre siftelni.
Az amúgy is lassú LCDre írást ez még jobban meg nyújtja. Ráadásul még közbe jöhet 1 megszakítás, ami aztán mindent összekavar!
:?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Az LCD kiírás _lábanként_megy, ha csak a Config LCDlábak van megadva. Spec eset az LCD4bit illetve azt 1 porton levő. De ez külső LIB-l lehet csak megoldani.

A bitforgatás ideje _töredéke_ az LCD utasításvégrehajtásának!
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

Robert írta:Az LCD kiírás _lábanként_megy, ha csak a Config LCDlábak van megadva. Spec eset az LCD4bit illetve azt 1 porton levő. De ez külső LIB-l lehet csak megoldani.

A bitforgatás ideje _töredéke_ az LCD utasításvégrehajtásának!
De az a legbiztosabb ha assembly-ben programozol és akkor minden
lépést külön megtervezhetsz.
Nem arra született a basic nyelv hogy elbonyolítsuk.Mert akkor csinálhatnád azt is hogy asm:(ide meg beszúrsz valami lcdkezelő
asm rutint)..
Nem tudom miért kell egyből leígazítani a másikat...
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Ezzel a változóval csak ennyit csinál az egész programban:

Kód: Egész kijelölése

Lcd Fut 
        Incr Fut
És állítólag a közbejövő megszakítás cseszí el!
Akkor mi más tipped lehet? :roll:
Válasz küldése