RS485 bufferelés és irányváltás

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Szerencsére úgy építettem meg, hogy át jumperelhető.
És ha szerepet cserélünk? HW-UART-RS485 ad-vesz, SW-UART-232 monitoroz. Így jobban működne?
Bufferelésnek utána nézek!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Igen.

Buffer:

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

Config COM1=buffered.....
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

„Config COM1=buffered” Ezt igy sehol nem találtam a helpben?
Nem inkább így helyes?:
Config Serialout = Buffered , Size = 20
:?:
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Ezt a bufferelést nem értem!
Így mind 2 UART-nak van Puffere?

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

'--- Alapadatok ---
$regfile = "M644def.dat"                                    'Chip
$crystal = 14745600                                         'Sebesség

$baud = 57600
'--- Foprogram ---
Dim Tstr As String * 40
Dim Num As Word , Mybaud As Word
Mybaud = 57600
Dim 485ad As Byte , 485vesz As Byte
485ad = 1
485vesz = 0
'open channel for output
Open "comd.7:Mybaud,8,n,1" For Output As #1
Open "comd.6:Mybaud,8,n,1" For Input As #2

Config Serialout = Buffered , Size = 200
Config Serialin = Buffered , Size = 200
Config Com1 = Buffered                                      ' , Size = 20
Config Pind.5 = Output                                      'Max485 adat irány
Portd.5 = 485vesz


Do                                                          'Vevö
  Input Tstr

  Print #1 ," text: " ; Tstr ;
  Input Num

  Print #1 , " number: " ; Num
Loop
'(
                   'Adó
Tstr = "Küldöt érték: "
Portd.5 = 485ad
Do                                                          'Adó
  For Num = 1 To 5000
     Print Tstr
 
     Waitms 1
     Print Num
     Waitms 1
  Next Num
Loop
')
End
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Csak a HW sorosportnak van/lehet buffere. Külön az adásnak, külön a vételnek...
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Köszi eddig értem!
Most már ezt az egész vételt megszakításba kellene átrakni!
De hogyan? Még ilyet sem csináltam!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

????

Egyszerű.
Miért akarod megszakításba rakni? a buffer pont ezt csinálja....
A config serialin-t nézd meg.

A ByteMatch=all paraméterrel egy szubrutinra el is ugrik, amivel fel is dolgozhatod az adatot.
Számos belső paramétere van:

"The following internal variables will be generated :
_RS_HEAD_PTR0 , a byte counter that stores the head of the buffer
_RS_TAIL_PTR0 , a byte counter that stores the tail of the buffer.
_RS232INBUF0 , an array of bytes that serves as a ring buffer for the received characters.
_RS_BUFCOUNTR0, a byte that holds the number of bytes that are in the buffer."
Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00

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

Ha már volt, akkor elnézést!

Létezik olyan AVR, amiben két hardveres UART van?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Igen!
Pl.: Mega64. Mega128
ATmega164,-324
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2008. december 16. kedd, 21:02-kor.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Ez tényleg egyszerűbb, mint gondoltam!
Ha már ilyen okos a Bascom akkor be lehet Config-olni, hogy au. Állítsa a MAX485 adat irány lábait?
:twisted:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Ám legyen:

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

CONFIG PRINT0 = pin
CONFIG PRINT1 = pin
Remarks
pin - The name of the PORT pin that is used to control the direction of an RS-485 driver.
mode - SET or RESET

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

'------------------------------------------------------------------------------ 
'name                     : rs485.bas 
'copyright                : (c) 1995-2006, MCS Electronics 
'purpose                  : demonstrates 
'micro                    : Mega48 
'suited for demo          : yes 
'commercial addon needed  : no 
'------------------------------------------------------------------------------ 
$regfile = "m48def.dat"                                     ' we use the M48 
$crystal = 8000000 
$baud = 19200 

$hwstack = 32 
$swstack = 32 
$framesize = 32 

Config Print0 = Portb.0 , Mode = Set 
Config Pinb.0 = Output                                      'set the direction yourself 

Dim Resp As String * 10 
Do 
   Print "test message" 
   Input Resp                                               ' get response 
Loop
:idea:
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Egészen addig jól működöt a szimulátorban a programom, amíg az utolsó sort bele nem tettem! Pedig ez lenne a lényeg!
„ Print #1 , "test message " ; Tstr ; "Szám: " ; Num „ Itt elakad de, nem jelez semmi hibát!
Valami hibázik, vagy ezt nem tudja kezelni a szimulátor?

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

$sim

$regfile = "m644def.dat"                                    ' we use the M48

$crystal = 8000000
$baud = 19200

$hwstack = 32
$swstack = 32
$framesize = 32

Dim Tstr As String * 40
Tstr = ""
Dim Num As Word , Mybaud As Word
Num = 10
Mybaud = 57600

Config Com1 = Buffered
Config Print0 = Portd.5 , Mode = Reset
Config Pind.5 = Output                                      'set the direction yourself

'open channel for output and input
Open "comd.7:Mybaud,8,n,1" For Output As #1
Open "comd.6:Mybaud,8,n,1" For Input As #2

Dim Resp As String * 10
Tstr = "Küldöt érték: "
Do
   Tstr = Inkey()
   Print "test message " ; Tstr
'   Input Resp
   Print Num
   Num = Inkey()

   Print "Szám: " ; Num
   Print #1 , "test message " ; Tstr ; "Szám: " ; Num

Loop
Irányváltás is működik. Bufferelést még nem tudom jó e így?
:?:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Gyakorlatban tessék kipróbálni, nem a szimulátorban! :)


Amiért nem megy: A szimulátor az időzítéseket kihagyja ($sim miatt), és így persze nem él a szoftveres sorosport....
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

A rossz hír, hogy a valóságban sem működik a SWcom port!
Pedig nélküle a RS485-öst sem látom, hogy mit csinál!
:evil: :cry:
Ja $Sim-t kiszedtem!
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Na az SW-UART nekem nem jött össze, feladtam!
Megoldottam HWn ! (232-es TX) – (485-ös RX) összekötve.
Így látom a 485-ön bejövő jelet.
Ez a sor nagy galibát csinált: „Config Com1 = Buffered”
Ez lett helyette: „Config Serialin = Buffered , Size = 200”
A többit legközelebb!

:)
Válasz küldése