Soros port (rs232)

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
tetye
Chipgyilok
Hozzászólások: 279
Csatlakozott: 2007. augusztus 29. szerda, 6:00

adat_küldés_hiba

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

sziasztok!
Van nekem egy nagy problémám. RS232 kummunikácioban egy karakter, amit a fene sem kért és ezen hasal el a vezérlés.
A gond az hogy bele tesz egy 3 pálcikás karaktert...
Ha serialin buffered akkor nem is fogadja az adatot akár 18 akár 1 az értéke.
Kiirattam a kijelzöre a beérkezö adatot, eredménye, és a .bas fileok itt:
http://tetye.hu/bascom
Remélem tud valaki segiteni.

Az ado oldali prg:

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

$regfile = "m32def.dat"
$crystal = 11059200
$baud = 9600
Config 1wire = Portd.2
Config Pind.6 = Input
Open "Comd.7: 1200 , 8 , n , 1" For Output As #2
Echo Off
Declare Sub Dsidbetolt
Declare Sub Init
Declare Sub Init1
Declare Sub Init2
Declare Sub Init3
Declare Sub Init4
Declare Sub Init5
Declare Sub Convallt
Declare Sub Printing
Declare Sub Resettiny
Declare Function Decigrades(byval Sc(9) As Byte) As Integer
Dim Min1 As Integer
Dim Max1 As Integer
Dim Min2 As Integer
Dim Max2 As Integer
Dim Min3 As Integer
Dim Max3 As Integer
Dim Min4 As Integer
Dim Max4 As Integer
Dim Min5 As Integer
Dim Max5 As Integer
Dim B As Byte
Dim W As Word
Dim F As Byte
Dim Temp1 As Integer
Dim Temp2 As Integer
Dim Temp3 As Integer
Dim Temp4 As Integer
Dim Temp5 As Integer
Dim Sc(9) As Byte
Dim Id1(8) As Byte
Dim Id2(8) As Byte
Dim Id3(8) As Byte
Dim Id4(8) As Byte
Dim Id5(8) As Byte
Dim Hiba(5) As Byte
Dim I As Byte


Reset Portc.7
  W = 1wirecount()
Min1 = 999
Min2 = 999
Min3 = 999
Min4 = 999
Min4 = 999
Resettiny
Do
Call Dsidbetolt
Call Convallt
Call Init
Call Printing

Loop
End

Sub Printing()
If Hiba(1) = 0 Then
Else
Waitms 500
Print #2, "lerrta"
Print "Hiba az 1es szenzoron!"
End If

If Hiba(2) = 0 Then
Else
Waitms 500
Print #2, "lerrtb"
Print "Hiba az 2es szenzoron!"
End If

If Hiba(3) = 0 Then
Else
Waitms 500
Print #2, "lerrtc"
Print "Hiba az 3as szenzoron!"
End If

If Hiba(4) = 0 Then
Else
Waitms 500
Print #2, "lerrtd"
Print "Hiba az 3as szenzoron!"
End If

If Hiba(5) = 0 Then
Else
Waitms 500
Print #2, "lerrte"
Print "Hiba az 5os szenzoron!"
End If

For I = 1 To 5
If Hiba(I) = 11 Then
Print I
End If
Next I





Select Case Pind.6
Case 1

   If Temp1 > 35 Then
   Print #2, "pkix"
   Waitms 500
   Print #2, "pbey"
   Else
   Print #2, "pkiy"
   Waitms 500
   Print #2, "pbex"
   Waitms 500
   End If
Case 0
Print #2, "pkix"
Waitms 500
Print #2, "pkiy"
Waitms 500
End Select

If Temp1 > 35 Then
  Print #2, "pbey"
Else
  Print #2, "pkiy"
End If

End Sub

'1es szenzor lekérdezése
Sub Init1()
1   wreset
1   wverify Id1(1)
1 wwrite , &HBE
 Sc(1) = 1wread(9)
  Temp1 = 0
  If Err = 0 Then
  If Sc(9) = Crc8(Sc(1), 8) Then
 Temp1 = Decigrades(Sc(9))
 If Min1 > Temp1 Then Min1 = Temp1
 If Max1 < Temp1 Then Max1 = Temp1
  Hiba(1) = 0
     End If
     Else
  Hiba(1) = 11
  End If

   End Sub

'2es szenzor lekérdezése
Sub Init2()
1 wreset
1 wverify Id2(1)
1 wwrite , &HBE
 Sc(1) = 1wread(9)
 Temp2 = 0
 If Err = 0 Then
  If Sc(9) = Crc8(Sc(1), 8) Then
 Temp2 = Decigrades(Sc(9))
 If Min2 > Temp2 Then Min2 = Temp2
 If Max2 < Temp2 Then Max2 = Temp2
  Hiba(2) = 0
  End If
   Else
  Hiba(2) = 11
  End If
End Sub

'3as szenzor lekérdezése
Sub Init3()
1 wreset
1 wverify Id3(1)
1 wwrite , &HBE
 Sc(1) = 1wread(9)
  Temp3 = 0
 If Err = 0 Then
  If Sc(9) = Crc8(Sc(1), 8) Then
 Temp3 = Decigrades(Sc(9))
 If Min3 > Temp3 Then Min3 = Temp3
 If Max3 < Temp3 Then Max3 = Temp3
  Hiba(3) = 0
  End If
    Else
  Hiba(3) = 11
  End If
  End Sub

'4es szenzor lekérdezése
Sub Init4()
1 wreset
1 wverify Id4(1)
1 wwrite , &HBE
 Sc(1) = 1wread(9)
   Temp4 = 0
 If Err = 0 Then
  If Sc(9) = Crc8(Sc(1), 8) Then
 Temp4 = Decigrades(Sc(9))
 If Min4 > Temp4 Then Min4 = Temp4
 If Max4 < Temp4 Then Max4 = Temp4
  Hiba(4) = 0
  End If
  Else
  Hiba(4) = 11
  End If
  End Sub

  '5os szenzor lekérdezése
Sub Init5()
1 wreset
1 wverify Id5(1)
1 wwrite , &HBE
 Sc(1) = 1wread(9)
   Temp5 = 0
 If Err = 0 Then
  If Sc(9) = Crc8(Sc(1), 8) Then
 Temp5 = Decigrades(Sc(9))
 If Min5 > Temp5 Then Min5 = Temp5
 If Max5 < Temp5 Then Max5 = Temp5
  Hiba(5) = 0
  End If
  Else
  Hiba(5) = 11
  End If
  End Sub



Sub Dsidbetolt()
'x     1
Id1(1) = &H10
Id1(2) = &HF3                                               '3
Id1(3) = &H72
Id1(4) = &H9E
Id1(5) = &H1
Id1(6) = &H8
Id1(7) = &H0
Id1(8) = &H17
'v        2
Id2(1) = &H10
Id2(2) = &H47
Id2(3) = &HA0
Id2(4) = &H7A
Id2(5) = &H1
Id2(6) = &H8
Id2(7) = &H0
Id2(8) = &H56
'y   3
Id3(1) = &H10
Id3(2) = &H8E                                               'e
Id3(3) = &HA9
Id3(4) = &H9E
Id3(5) = &H1
Id3(6) = &H8
Id3(7) = &H0
Id3(8) = &HEB
'z      4
Id4(1) = &H10
Id4(2) = &H2C
Id4(3) = &HCC
Id4(4) = &H7A
Id4(5) = &H1
Id4(6) = &H8
Id4(7) = &H0
Id4(8) = &H5D
'b     5
Id5(1) = &H10
Id5(2) = &H98
Id5(3) = &HC5
Id5(4) = &H7A
Id5(5) = &H1
Id5(6) = &H8
Id5(7) = &H0
Id5(8) = &H75
End Sub

Sub Convallt()
1 wreset
1 wwrite &HCC
1 wwrite &H44
Waitms 200
End Sub


Function Decigrades(byval Sc(9) As Byte)
Dim Tmp As Byte, T As Integer, T1 As Integer

 Tmp = Sc(1) And 1
 If Tmp = 1 Then Decr Sc(1)
 T = Makeint(Sc(1), Sc(2))
 T = T * 50
 T = T - 25
 T1 = Sc(8) - Sc(7)
 T1 = T1 * 100
 T1 = T1 / Sc(8)
 T = T + T1
 Decigrades = T / 10
  Decigrades = Decigrades / 10

End Function

Sub Resettiny()                                             ' reseteli a tini2313at
Set Portc.7
Waitms 500
Reset Portc.7
End Sub

Sub Init()
 Init1
Waitms 200
 Init2
Waitms 200
 Init3
Waitms 200
 Init4
Waitms 200
Init5
Waitms 200

End Sub
A fogado:

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

$regfile = "attiny2313.dat"
$crystal = 11059200
$baud = 1200
'Config Serialin = Buffered , Size = 1
Echo Off
Config Lcdpin = Pin , Rs = Portd.5 , E = Portd.4 , Db4 = Portb.7 , Db5 = Portb.6 , Db6 = Portb.5 , Db7 = Portb.4
Config Lcd = 20 * 4
Initlcd
Cls
Lcd "Inicializalas:"
Waitms 100
Lcd "."
Waitms 100
Lcd "."
Waitms 100
Lcd "."
Waitms 0
Lowerline
Lcd "Kesz!"
Waitms 400
Cls
Config Portd.3 = Output
Config Portb.1 = Output                                     '1                                   '
Config Portb.2 = Output                                     '2                                '
Config Portb.3 = Output                                     '3
Config Portd.6 = Output                                     '4
Config Portb.0 = Output                                     '5
Set Portd.3
Dim Elsobajt As String * 3
Declare Sub Adatcsomag
Declare Sub Scr
Declare Sub Hiba
Dim Command As String * 4
Dim Script As String * 8
Dim S As String * 14
Dim Z As Integer
Dim X As Integer
Dim A As Integer
Dim B As Byte
Dim Hibahelye As String * 2


Do
S = ""
Input S
Lcd S
Wait 1
Cls
Z = Len(S)
Z = Z - 1
S = Right(S, Z)
GoSub Adatcsomag
GoSub Scr
If Command = "port" Then
Select Case Script
'1
Case "bey"
Set Portb.1
Case "kiy"
Reset Portb.1
'2
Case "bex"
Set Portb.2
Case "kix"
Reset Portb.2
'3
Case "bec"
Set Portb.3
Case "kic"
Reset Portb.3
'4
Case "bev"
Set Portd.6
Case "kiv"
Reset Portd.6
'5
Case "beb"
Set Portb.0
Case "kib"
Reset Portb.0

End Select

End If
 If Command = "lcd" Then
 Select Case Script

Case "m"
Lcd "A rendszer hiba"
Lowerline
Lcd "nelkul uzemel."
Case "err"
GoSub Hiba
End Select
End If


 Loop
 End

Sub Adatcsomag():

Elsobajt = Left(S, 1)
Select Case Elsobajt
Case "l"
Command = "lcd"
Case "p"
Command = "port"

 End Select
 End Sub



Sub Scr():
X = Len(S)
X = X - 1
Script = Right(S, X)
Lcd Script
Wait 1
End Sub

Sub Hiba():
 Hibahelye = Right(Script, 2)
  Lcd Script
 Lowerline
 Lcd Hibahelye
 Wait 2
 Cls
Select Case Hibahelye
Case "ta"
Locate 1, 1
Lcd "Szenzor hiba!"
Locate 2, 1
Lcd "Hiba helye:"
Locate 4, 1
Lcd "1 es hofok jelado"

Case "tb"
Locate 1, 1
Lcd "Szenzor hiba!"
Locate 2, 1
Lcd "Hiba helye:"
Locate 4, 1
Lcd "2 es hofok jelado"

Case "tc"
Locate 1, 1
Lcd "Szenzor hiba!"
Locate 2, 1
Lcd "Hiba helye:"
Locate 4, 1
Lcd "3 as hofok jelado"

Case "td"
Locate 1, 1
Lcd "Szenzor hiba!"
Locate 2, 1
Lcd "Hiba helye:"
Locate 4, 1
Lcd "4 es hofok jelado"

Case "te"
Locate 1, 1
Lcd "Szenzor hiba!"
Locate 2, 1
Lcd "Hiba helye:"
Locate 4, 1
Lcd "5 os hofok jelado"

Case "pa"
Locate 1, 1
Lcd "Szenzor hiba!"
Locate 2, 1
Lcd "Hiba helye:"
Locate 4, 1
Lcd "1 es nyomás jelado"

Case "pb"
Locate 1, 1
Lcd "Szenzor hiba!"
Locate 2, 1
Lcd "Hiba helye:"
Locate 4, 1
Lcd "2 es nyomás jelado"

Case "pc"
Locate 1, 1
Lcd "Szenzor hiba!"
Locate 2, 1
Lcd "Hiba helye:"
Locate 4, 1
Lcd "3 as nyomás jelado"

Case "pd"
Locate 1, 1
Lcd "Szenzor hiba!"
Locate 2, 1
Lcd "Hiba helye:"
Locate 4, 1
Lcd "4 es nyomás jelado"

Case "pe"
Locate 1, 1
Lcd "Szenzor hiba!"
Locate 2, 1
Lcd "Hiba helye:"
Locate 4, 1
Lcd "5 os nyomás jelado"



End Select

End Sub
Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00

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

Nem olvastam el a kódot, mert nincs sok időm, de nem a soremelés kocsi vissza csinál ilyet? [chr(13)+chr(10)]

Ha nem erről van szó akkor nemszótam... : :oops:
Avatar
tetye
Chipgyilok
Hozzászólások: 279
Csatlakozott: 2007. augusztus 29. szerda, 6:00

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

Hogy őszinte legyek nem tudom de én nem küldök ilyet ki szerintem, és ha lenne ennek inkább a végén kéne beesnie, de ez az elejére szemetel.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Hülye tipp: Külön vizsgálni a 2 áramkört a PCről egy sima TTL-soros átjáróval + Br@y terminallal. Így látod hogy a küldő, a fogadó vagy a kommunikációs oldal fekszik ki...

Esetleg még ami érdekes lehet, hogy a UART adó lábra egy fel vagy lehúzó ellenállást (azt hiszem lehúzó kell rá). 10K-val a GND fele, hátha valami zajt szed össze, és lebeg a láb....
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Szerintem a „tini2313at” 0-val kel Resetelni?

Sub Resettiny() ' reseteli a tini2313at
Set Portc.7 ’ 1-re állit
Waitms 500
Reset Portc.7 ’ Lekapcsol 0-ra. Resetben marad?
End Sub
:?:

PortC alapból bemenet, kimenetnek definiálni kel!? :!:
Avatar
tetye
Chipgyilok
Hozzászólások: 279
Csatlakozott: 2007. augusztus 29. szerda, 6:00

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

2 dolog.
Robi:
Tettem fel screenshotot a terminalbol a tiny 2 lábárol figyelve ha benne van a tiny ha nincs mint ha az ado szemetelne. Nézd meg pls az előbbi linken a képet. Probáltam lehuzni de semmi.
Kapu48:
A reset tiny rész müködik tökéletesen most, azért van forditva let nem direktbe a láb kapcsilja resetbe hanem egy tranyó.
bc547npn és ha 1 re huzom a kimenetet akkor nyit és engedi a gnd-t a tiny reset lábára.
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 soros adatküldés legyen a programban. Így mit csinál? Így a SW és HW hiba elválasztható....
Avatar
tetye
Chipgyilok
Hozzászólások: 279
Csatlakozott: 2007. augusztus 29. szerda, 6:00

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

Na bumm....
Már ott tartok hogy az adó(mega32) valamiért nem hajlandó jó lenni:@
Amit probáltam: -mega16 -mega32 -mega644 -mega8535 mindegyikkel az a tapasztalat hogy: 11megás külsö kvarcrol is és belső 8 megásrol is
csak a hardveres uart lábon hagyja el értelmes adat ha hardveresen kezelem le akkor is jo ha sw-vel akkor is jo, de amint másik lábat kezelnék le sw ből rögtön csak szemét jön.
Probáltam usb-s illesztővel is és sima max232-vel. Eredmény mindig a zátony. Probáltam a régebbi bascomokkal pl 7,3 7,4 ,8,4 és most utoljára 9,5 el is, de ez sem segitetett, mint ahogy a baud változtatása sem 1200-9600. A progi a végén már csak ennyi volt:

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

$regfile = "m32def.dat" 
$crystal =  11059200
Open "Comd.7: 1200 , 8 , n , 1" For Output As #2 
Echo Off 
Do
Print #2, "lerrta"
Wait 1
Loop
Na erre tud valaki mondani valamit?
Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

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

M16/M32-vel nekem még soha sem sikerült _tökéletes_ bináris soros kommunikációt létrehozni. Pedig külső Q: 7,3728M, baud rate-tel lementem kutyába 1200bps-ig, de semmi...

Biztos az én hibám, de ugyan az a kód M8-cal hibátlanul megy. :oops:
"Az IC-k füsttel működnek. Ha kijön belőlük a füst, nem működnek tovább." - ismeretlen szerző
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

1 példa sorosporton byte küldés/fogadásra:

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

'--------------------------------------------------------------------
'  Példa 4 bytes adás/vételére!
'                      SERINT.BAS
'                  (c) 1999-2005 MCS Electronics
'  serial interrupt example for AVR
' also look at CONFIG SERIALIN for buffered input routines
'--------------------------------------------------------------------
$regfile "attiny2313.dat"
$crystal = 16000000
$baud = 9600

Const Maxbyte = 4                                           '4 number of bytes

Dim Bc As Byte                                  'byte counter
Dim Buf(maxbyte) As Byte                                    'serial buffer

Bc = 0                                                      'rest character counter

On Urxc Rec_isr                                             'define serial receive ISR
Enable Urxc                                                 'enable receive isr
Enable Interrupts                                           'enable interrupts to occur

Do
'4 bytes adás
   For Bc = 1 To Maxbyte
        Udr = Buf(Bc)                                        ' ser out
        Waitms 1
   Next Bc

'
'4 bytes feldolgozása
'Bc = 4 jelzi, hogy beérkezet a 4 bytes, feldolgozzuk öket
  If Bc = Maxbyte Then                                      'we received something
     Disable Serial
 'print buffer
     For Bc = 1 To Maxbyte
        LCD  Buf(Bc)  ; ":" ;                             'print counter, byte
     Next Bc
     Bc = 0                                                 'rest Byte counter
     Enable Serial
  End If
'
Loop

'4 bytes vétel.Int-ben beolvassuk az érkezet byte-ot
Rec_isr:
If Bc < Maxbyte Then
     Incr Bc                                                'increase buffer counter  (0-ás cimre nem teszünk semmit!)
     Buf(bc) = Udr                                          'read UDR only once  add to buffer
End if
Return
Minden sallangot kiszedtem belőle, hogy kis helyet foglaljon!
:wink:
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Az előző 2 irányú forgalom, itt van 1 irányúsítva:

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

 'Ez megy az adóba
'--------------------------------------------------------------------
'  Példa 4 bytes adás/vételére!
'                      SERINT.BAS
'                  (c) 1999-2005 MCS Electronics
'  serial interrupt example for AVR
' also look at CONFIG SERIALIN for buffered input routines
'--------------------------------------------------------------------

$regfile "attiny2313.dat"
$crystal = 16000000
$baud = 9600

'Itt megadjuk menyi Bytes küldünk
Const Maxbyte = 4                                           '4 number of bytes

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
Config Lcdmode = Port
Config Portb.6 = Output

Dim Bc As Byte , Te As Byte , I As Byte                     'byte counter
Dim Buf(maxbyte) As Byte , Toi As Byte                      'serial buffer

I = 1
Toi = Maxbyte
Do
'Tesztelésre feltöltjük a buffert emelkedő értékkel
   Te = 1
   For Bc = I To Toi
         Buf(te) = Bc                                       ' Ez lesz a kimenő adat puffer. ser out
         Te = Te + 1
   Next Bc
   I = I + Maxbyte
   Toi = Toi + Maxbyte
'Ez elöző feladat most direkt modszerrel:
'(
   Buf(1) = Maxbyte                                       ' Ez lesz a kimenő adat puffer. ser out
   Buf(2) = 105
   Buf(3) = I
   Buf(4) = 7
')
   Cls
'4 bytes adás
   For Bc = 1 To Maxbyte
'Közvetlenül a soros port adatregiszterébe írjuk a küldendő Byte-t Így a Bascom nem kavar bele!
        Udr = Buf(bc)                                       ' ser out
        Lcd Buf(bc) ; "," ;                                 'Kiírjuk az elküldött értékeket
'        Waitms 2                                            'Várakozás gyanánt csinálunk valami hasznosat
   Next Bc                                                  'Két küldés között megvárjuk, hogy átmenjen az adatunk

   Wait 10                                                     'Legyen időnk kiértékelni a folyamatot.

Loop

End                                                         'end program

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

'Ez megy a vevő részbe!
'--------------------------------------------------------------------
'  Példa 4 bytes adás/vételére!
'                      SERINT.BAS
'                  (c) 1999-2005 MCS Electronics
'  serial interrupt example for AVR
' also look at CONFIG SERIALIN for buffered input routines
'--------------------------------------------------------------------

$regfile "attiny2313.dat"
$crystal = 16000000
$baud = 9600

'Enyi Bytes várunk
Const Maxbyte = 4                                           '4 number of bytes
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
Config Lcdmode = Port
Config Portb.6 = Output

Dim Bc As Byte                                              'byte counter
Dim Buf(maxbyte) As Byte                                    'serial buffer

Bc = 0                                                      'rest character counter
                                                       'reset receive flag
'Beállítjuk a soros vonal megszakítás kérését
On Urxc Rec_isr                                             'Ide ugrik ha jött 1 byte. define serial receive ISR
Enable Urxc                                                 'enable receive isr
Enable Interrupts                                           'enable interrupts to occur

Do

'
'4 bytes feldolgozása
'Bc = 4 jelzi, hogy beérkezet a 4 bytes, feldolgozzuk öket
  If Bc = Maxbyte Then                                      'we received something
     Disable Serial                                         'Amíg fel nem dolgozzuk tiltjuk a további bejövő adatot
'Ide jöhet az a rész amit akarsz az adatokkal tenni!
 'print buffer
     For Bc = 1 To Maxbyte
        Lcd Buf(bc) ; ":" ;                                 'print counter, byte
     Next Bc
'Soros adat fogadást újból engedélyezzük
     Bc = 0                                                 'reset Byte counter
     Enable Serial
  End If
'
Loop

'4 bytes vétel Int-ben beolvassuk az érkezet byte-ot
Rec_isr:
  If Bc < Maxbyte Then                                      'Nem engedjük túlírni a puffert mert az hibát okoz
     Incr Bc                                                'increase buffer counter  (0-ás cimre nem teszünk semmit!)
'A beérkezett adatot berakjuk a következő helyre.
     Buf(bc) = Udr                                          'read UDR only once  add to buffer
  End If
Return

End                                                         'end program
Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00

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

nobody_hun írta:M16/M32-vel nekem még soha sem sikerült _tökéletes_ bináris soros kommunikációt létrehozni. Pedig külső Q: 7,3728M, baud rate-tel lementem kutyába 1200bps-ig, de semmi...

Biztos az én hibám, de ugyan az a kód M8-cal hibátlanul megy. :oops:
A jelek szerint nem csak a te hibád.

Elővettem egy régebbi "projektet". Egy M88 küld uart-on néhány bájtot egy M128-nak. Véletlenszerűen néha becsúszik néhány "szemét" érték. Először az M88-ra gyanakodtam, de annak tx lábát figyelve a terminálban hibátlanul küldi az adatokat. Az M128-nál lehet gond, mert kipróbált program dolgozza fel a vett bájtokat, ami máshol már bevállt. Mindkét proci kvarcról jár, közös gnd, miegymás. Nem hiszem, hogy áramkörileg van benne gubanc. Már azon töröm a fejem, hogy felhasználok egy portot mindkét ic-nél, és párhuzamosan tolom át az a néhány bájtot az lcd-khez hasonló módszerrel. :roll:
Avatar
Kotesz
Tranzisztorgyógyász
Hozzászólások: 171
Csatlakozott: 2009. szeptember 24. csütörtök, 6:00

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

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

$regfile = "m8def.dat"
$crystal = 4000000


Do

  Print "Szevasz Kotesz "
  Wait 1

Loop

End
Erre a terminalban az M8 ezt küldi vissza:

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

ř€xxţx€xŕřxüxţ€xŕřxxŕřxŕxţřxx€xţ€xŕřxxŕxţ€xđ
Miért?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Orajeled nem jó!
Vagy a soros sebességed....


Aműgy a Bascom konyv első 10-12 fejezetét végigolvastad már?
Abban _sok_ kérdésedre lapban ott válasz....
Avatar
Kotesz
Tranzisztorgyógyász
Hozzászólások: 171
Csatlakozott: 2009. szeptember 24. csütörtök, 6:00

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

Elolvastam

$crystal = 4000000
a külső kristályon ez található:

YCL4.0000H9
Válasz küldése