Soros port (rs232)

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

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

Először is a Megszakításban csak ennyi kellene a többit a főprogramba.

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

$regfile = "ATtiny2313.DAT"
$crystal = 4000000
$baud = 600
Echo Off

Config Porta = Output
Config Portd = Output
Config Portb = Input
Dim A As String * 8

Enable Interrupts
Enable Urxc
On Urxc Getchar

'Foprog:
Do

  Waitms 400
  Toggle Porta.1
If A = "A" Then
 Toggle Portd.2
 Wait 1
End If

If A = "BBBBBBBB" Then
 Toggle Portd.3
 Wait 1
End If

If A = "CS3" Then
 Toggle Portd.4
 Wait 1
End If

If A = "AJTOTAVK" Then
 Toggle Portd.5
 Wait 1
End If

' Goto Foprog
Loop

Getchar:
  Input A  
 Toggle Porta.2
Return


End
Másodszor a „$baud = 400 „ nem szabványos inkább legyen : $baud = 600
A hozzászólást 3 alkalommal szerkesztették, utoljára kapu48 2009. június 6. szombat, 20:22-kor.
Avatar
tetye
Chipgyilok
Hozzászólások: 279
Csatlakozott: 2007. augusztus 29. szerda, 6:00

e

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

üdv.
Így probálted?

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


$regfile = "ATtiny2313.DAT"
$crystal = 4000000
$baud = 400 '? nem 300? vagy 1200? vagy...
Echo Off

Config Porta = Output
Config Portd = Output
Config Portb = Input
Dim A As String * 8

Enable Interrupts
Enable Urxc
On Urxc Getchar

Do
  Waitms 400
  Toggle Porta.1
Loop
End

Getchar:
Input A
 Toggle Porta.2

If A = "A" Then
 Toggle Portd.2
 Wait 1
End If

If A = "BBBBBBBB" Then
 Toggle Portd.3
 Wait 1
End If



If A = "CS3" Then
 Toggle Portd.4
 Wait 1
End If


If A = "AJTOTAVK" Then
 Toggle Portd.5
 Wait 1
End If
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

Igen .
9600 -nál is rendesen működik 1 karakter hosszal , vagy számmal.
3 számmal is próbáltam , az is jó , de az nekem nem megfelelő.
Kefeur
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

Szerintem a megszakítás lekezelésében van hiba.
A 8 darab B betű fogadásakor ráfut a megszakításra 3 szor is (látszik a led-en)
Valahogy tömb szerűen kellene kezelni a fogadott adatot , vagy bufferbe olvasni ....
Nem tudom.
Kefeur
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Ved a : Dim A As String * 9 –re így a sorvége jel is belefér.
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

És azt hogyan írjam bele if a="BBBBBBBBSORVÉG"??
Ezt nem értem
Kefeur
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

ENTER = Sorvége jel
De Nekem Működik ahogy kijavítottam neked!
:D
Csak:

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

Getchar:
 Input A
 Toggle Portc.2
Return
Ha ezt vizsgálod: if a="BBBBBBBB” akkor ezt is írd be: BBBBBBBB -ENTERGOMB
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

Értem .
Köszönöm a segítséget , hamarosan kipróbálom.

:)
Kefeur
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ód: Egész kijelölése

 $regfile = "ATtiny2313.DAT"
$crystal = 4000000
$baud = 9600
Echo Off

Config Porta = Output
Config Portd = Output
Config Portb = Input
Dim A As String * 8

Enable Interrupts
Enable Urxc
On Urxc Getchar

'Foprog:
Do

  Waitms 400
  Toggle Porta.1
  Print A      'Ha beszúrod ezt a sort látod a monitoron mit írtál be

If A = "A" Then
 Toggle Portd.2
 Wait 1
End If

If A = "BBBBBBBB" Then
 Toggle Portd.3
 Wait 1
End If

If A = "CS3" Then
 Toggle Portd.4
 Wait 1
End If

If A = "AJTOTAVK" Then
 Toggle Portd.5
 Wait 1
End If

' Goto Foprog
Loop

Getchar:
  Input A
 Toggle Porta.2
Return


End
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

Ez nem működik sajnos , mert nem terminálról jön az adat hanem másik chip től.
megszakításon belül kell lekezelni a portváltásokat (van rá bőven idő)

Az adatok átkerülnek a 2313-ba mert látom ,hibátlanok!
De a 8 B-vel nem tud mit kezdeni!
Kefeur
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Akkor hiba lehet, hogy nem külső kristályról megy a CHIP. És rossz az időzítésed!
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

Sajna nem ez a gond.
úgy látom hogy ha kiíratom a megszakításban az A -t , a 8 darab b helyett minden b után jön 1 enter
Ezt már tényleg nem tudom hogyan kezeljem le.
Kefeur
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Hogyan küldöd a másik CHIPböl a karakter?
Avatar
DmANn
DrótVégénSzéndarab
Hozzászólások: 26
Csatlakozott: 2009. február 1. vasárnap, 7:00

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

Sziasztok!

Én is szenvedek az rs232vel. 8O

PCről küldök adatot uC-re, max232vel.
A uC annyit tud, hogy visszaírja a vett karaktereket.

Amikor terminálből én írok be valamit, tökéletesen működik.
Ámde, ha szoftverrel (pc) írok, akkor nagyon gyakran hibázik.

uC:

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

$regfile = "2313def.dat"
$crystal = 11059200
$baud = 38400

Config Pind.5 = Output


Dim S As String * 50

Do
  Set Portd.5
  Input S Noecho
  Print S
  Reset Portd.5
Loop

End
11059200 Hz kristály, 38400 bps, modulus 0, tehát a hibaesély elvileg 0%.

A soros portom emulált, usb-s átalakító.
Karakterenként átküldve nincs semmi gond, de ha hosszabb szöveget küldök át (kb 20 karakter!), akkor minden 4-5 ilyen szöveg után 1-2 karakter hiba van.
Szerintem ez nem normális működés, vagy tévedek?
Mit ronthattam el? :?

Egyébként a pc-s program váza:
csinál egy random szöveget 20 karakter hosszal, hozzádob egy #13-at, és elküldi, majd megfigyeli mit ír vissza, és összehasonlítja.

Természetesen a port paraméterek megegyeznek, baudrate, start-stop bit stb..


Mindenkinek további kellemes hétvégét!

DmANn
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

Szinte 100 biztos hogy jól megy át , mert ellenőrzöm terminálon.
Amit küldök megjön hibátlanul.
Itt a gond az 1-nél több betű értelmezésénél, felismerésénél van szerintem.
: ha A,B,C,D-t küldök , 4 kimenetet nem téveszti el soha .
Mind sorra rendesen kapcsolgatja.
Kettő vagy több karakter is megjön rendesen , de nem látja!
Itt a fórumban láttam :config serialin ...buffered=10
Ezzel nem lehetne valamit kezdeni??

Az adatok átvitele 2 chip 5mm-re egymástól összekötve vezetékkel.
Próbáltam rádiós kapcsolattal 30m-ig tökéletesen ugyan az az eredmény.
Kefeur
Válasz küldése