RFM12B élesztés

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
Marvinn
Tranzisztorgyógyász
Hozzászólások: 153
Csatlakozott: 2008. július 24. csütörtök, 6:00

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

Init data:

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

'el : Enable TX register = 1
'ef : Enable RX FIFO buffer = 1
'Select 868 MHz band
'Select 12 pF crystal load capacitor
'80E7


'er : Enable receiver chain = 1
'ebb : Enable baseband circuit = 0
'et : Enable PLL,PA, TX = 0
'es : Enable synthesizer = 1
'ex : Enable crystal oscillator = 1
'eb : Enable low battery detector = 0
'ew : Enable wake-up timer = 0
'dc : Disable clock output = 0
'8298


'Set center frequency to 868.3 MHz
'A67C


'Set datarate to 10.77586 kbps
'C61F


'p16 : 0=INTin, 1=VDIout = 1
'VDI response time = Fast
'Receiver bandwidth = 270 kHz
'LNA gain = 0 dB
'RSSI threshold = -103 dBm
'9460

'al : Clock recovery auto lock control = 1
'ml : Clock recovery lock control = 0
's : (0=digital, 1=analog filter) = 0
'DQD threshold = 4
'C2AC

'sp : Select single Byte Sync pattern = 0
'al : Disable Sync pattern recognition = 0
'ff : FIFO fill = 0
'dr : Disable highly sensitive Reset = 1
'FIFO IT level = 8
'CA81

'Synchron pattern = D4
'CED4


'AFC automatic mode = Keep offset when VDI=h
'st : Strobe edge = 0
'fi : Fine mode = 0
'oe : Offset register enable = 1
'en : Calculate offset = 1
'Range limit = No restriction
'Max. Deviation = N/A
'C483


'mp = 0
'Delta f (fsk) = 90 kHz
'Output power = 0 dB
'9850


'lpx : Enable low power crystal oscillator = 0
'ddy : Enable phase detector delay = 0
'ddit : Disable PLL loop dithering = 1
'Select clock output slew rate control for 2.5 MHz or less
'Select PLL bandwidth for max. 256 kbps
'CC67


'T wakeup = 0 ms
'E000


'en : Enable low duty-cycle = 0
'Duty-cycle = N/A
'C800


'Vlb = 2.2 V
'Clock output = 1.66 MHz
'C040
Avatar
broland
Tranzisztorgyógyász
Hozzászólások: 152
Csatlakozott: 2009. április 20. hétfő, 6:00

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

Szia Marvinn

A legkissebb (7 nap) családtag születése miatt most nem igen kerülök AVR közelébe, de ezt még régebben találtam, és eddig nem próbáltam ki. Esetleg nézd meg ezt is, és ha működik pls oszd meg velünk :)

Üdv Roland

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

$regfile = "m32def.dat"
$hwstack = 32
$swstack = 10
$framesize = 40

'$crystal = 11059200
$crystal = 8000000
$baud = 19200

Nsel Alias Portb.4
Sdi Alias Portb.5
Sdo Alias Pinb.6
Sck Alias Portb.7

Dim D As Word
Dim Data_in(10) As Byte
Dim Data_out(10) As Byte
Dim N As Byte
Dim Timeout As Word
Dim T As Word
Dim Tt As Word
Dim Freq As Single

Declare Sub Send_rfm12
Declare Sub Receive_rfm12
Declare Sub Freq_rfm12
Declare Sub Wait_rfm12
Declare Function Spi16(byval Dout As Word) As Word

Config Nsel = Output
Config Sdi = Output
Config Sck = Output
Config Portc = Output
Porta = &HFF

'Init
  Nsel = 1
  Sck = 0
 'D = Spi16(&H80d7)                                         ' El , Ef , 11.5pf, 433 MHz band
  D = Spi16(&H80e7)                                         ' El , Ef , 11.5pf, 868 MHz band
  D = Spi16(&H82d9)                                         '!er , !ebb , Et , Es , Ex , !eb , !ew , Dc
  D = Spi16(&Ha67c)                                         ' 434,15 MHz / 868,3 MHz
  D = Spi16(&Hc647)                                         ' 4.8kbps
  D = Spi16(&H94a4)                                         ' Vdi , Fast , 134 kHz , 0db , -79dbm
  D = Spi16(&Hc2ac)                                         ' Al , !ml , Dig , Dqd4
  D = Spi16(&Hca81)                                         ' Fifo8 , Sync , !ff , Dr
  D = Spi16(&Hc483)                                         ' @pwr , No Rstric , !st , !fi , Oe , En
  D = Spi16(&H9850)                                         ' 90 kHz , power - 0 dB
  D = Spi16(&He000)                                         '
  D = Spi16(&Hc800)                                         '
  D = Spi16(&Hc000)                                         ' 1 MHz , 2.2V

  Freq = 868.300
  Freq_rfm12

'start transmitter, no data
'Goto Test1:

'transmit  data
'Goto Test2:

'transmit key data
'Goto Test3:

'start receiver, all data
'Goto Test4:

'start receiver, matched data
'Goto Test5:


 Do
    For N = 1 To 10
      Data_out(n) = N
    Next N
    Send_rfm12
    Waitms 500
    For N = 1 To 10
       Data_in(n) = 0
    Next N
    Timeout = 400 + Rnd(1000)
    Receive_rfm12
    For N = 1 To 10
       Print Data_in(n);
       Print " ";
    Next N
    Waitms 700
 Loop


Sub Freq_rfm12
  If Freq < 800 Then Freq = Freq * 2
  Freq = Freq - 860
  D = Freq / 0.0050
  If D < 96 Then D = 96
  If D > 3903 Then D = 3903
  D = D + &HA000
  D = Spi16(d)
End Sub


Sub Send_rfm12
  D = Spi16(&H8238)
  Wait_rfm12
  D = Spi16(&Hb8aa)
  Wait_rfm12
  D = Spi16(&Hb8aa)
  Wait_rfm12
  D = Spi16(&Hb8aa)
  Wait_rfm12
  D = Spi16(&Hb82d)
  Wait_rfm12
  D = Spi16(&Hb8d4)
  For N = 1 To 10
    Wait_rfm12
    D = &HB800 + Data_out(n)
    D = Spi16(d)
  Next N
  Wait_rfm12
  D = Spi16(&Hb8aa)
  Wait_rfm12
  D = Spi16(&Hb8aa)
  Wait_rfm12
  D = Spi16(&H8208)
End Sub

Sub Wait_rfm12
  Nsel = 0
  Do
  Loop Until Sdo = 1
End Sub


Sub Receive_rfm12
  Tt = Timeout * 10
  D = Spi16(&H82c8)
  D = Spi16(&Hca83)
  For N = 1 To 10
    Nsel = 0
    T = 0
    Do
      T = T + 1
      Waitus 100
      If T > Tt Then Goto Nosignal
    Loop Until Sdo = 1
    D = Spi16(&Hb000)
    Data_in(n) = D
  Next N
Nosignal:
  D = Spi16(&H8208)
End Sub


Function Spi16(byval Dout As Word) As Word
Local Nspi As Integer
Local Dspi As Integer
Local Dsdo As Word
  Nsel = 0
  Dsdo = 0
  For Nspi = 1 To 16
    Dspi = Dout And &H8000
    If Dspi = 0 Then
       Sdi = 0
    Else
       Sdi = 1
    End If
    Dout = Dout * 2
    Dsdo = Dsdo * 2
    Dsdo = Dsdo + Sdo
    Sck = 1
    Waitus 5
    Sck = 0
  Next Nspi
  Nsel = 1
  Spi16 = Dsdo
End Function



'transceiver tests

'start transmitter, no data
Test1:
  D = Spi16(&H8238)
  Do
  Loop


  'transmit data
Test2:
  D = Spi16(&H8238)
  Do
    Wait_rfm12
    D = Spi16(&Hb8aa)
  Loop


  'transmit key data
Test3:
  D = Spi16(&H8238)
  Do
    Wait_rfm12
    D = Spi16(&Hb82d)
    Wait_rfm12
    D = Spi16(&Hb8d4)
  Loop


'start receiver, all data
Test4:
  D = Spi16(&H82c8)
  D = Spi16(&Hca87)
  For N = 1 To 100
    Wait_rfm12
    D = Spi16(&Hb000)
    Data_in(n) = D
    Print Chr(d);
  Next N
  Do
  Loop


'start receiver, matched data
Test5:
    D = Spi16(&H82c8)
    D = Spi16(&Hca83)
    For N = 1 To 100
      Wait_rfm12
      D = Spi16(&Hb000)
      Data_in(n) = D
      Print Chr(d);
    Next N
  Do
  Loop

Avatar
Marvinn
Tranzisztorgyógyász
Hozzászólások: 153
Csatlakozott: 2008. július 24. csütörtök, 6:00

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

Sziasztok!

Elővettem újra a modulokat :)
Azt meg tudja nekem valaki mondani, hogy adó módban az adat küldésénél miért kell 2 byte-tal többet küldeni ami azt eredményezni hogy az adat végén van 2db 0?
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 olyan adat átvitelek során, ahol hibás átvitel is előfordulhat!
Általában valamilyen hiba ellenőrzést célszerű beiktatni.

Ez lehet csak egyszerűbb, vagy bonyolultabb. Az alkalmazástól függően.
A leg kevesebb, amit ilyen kór meg kel tenni, hogy jelezzük az adat folyam kezdetét, és végét valamilyen módon.
Így tudjuk a vétel oldalon ellenőrizni, hogy az egész adatot megkaptuk, vagy csak töredéket.

De ha ez az ellenőrzés elmarad, akkor feleslegesen ne küldöz záró karaktereket!
8)
Avatar
Marvinn
Tranzisztorgyógyász
Hozzászólások: 153
Csatlakozott: 2008. július 24. csütörtök, 6:00

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

Na pont ezzel küzdök :)
jelen esetben a vevő oldal onnan tudja hogy vége az adatküldésnek hogy ez a bit üres...

jelenleg az a gond hogy zaj miatt a fifo feltöltődik false adatokkal... gondoltam arra hogy az üzenet elején küldök egy ID-t amit a vevő ellenőriz és ha nem ezzel az ID-vel kezdődik akkor nem használja az adatot, törli a fifot.. ekkor még az a baj hogy ettől még dolgozik a modul, megszakítás is jön, "foglalja" a procit...

hogy szokták ellenőrizni az adatátvitelt?


kapu48 írta:Az olyan adat átvitelek során, ahol hibás átvitel is előfordulhat!
Általában valamilyen hiba ellenőrzést célszerű beiktatni.

Ez lehet csak egyszerűbb, vagy bonyolultabb. Az alkalmazástól függően.
A leg kevesebb, amit ilyen kór meg kel tenni, hogy jelezzük az adat folyam kezdetét, és végét valamilyen módon.
Így tudjuk a vétel oldalon ellenőrizni, hogy az egész adatot megkaptuk, vagy csak töredéket.

De ha ez az ellenőrzés elmarad, akkor feleslegesen ne küldöz záró karaktereket!
8)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

HELP kulcs szavak:

CHECKSUM , CRC8 , CRC16, CRC16UNI , CRC32 , TCPCHECKSUM


:wink:
Avatar
Marvinn
Tranzisztorgyógyász
Hozzászólások: 153
Csatlakozott: 2008. július 24. csütörtök, 6:00

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

Persze ez megvan..
Ott vagyok meglőve hogy a vevőt nem igazán lehet szimulátorban nézegetni.. megszakítást kaphat de adatot nem tudok "küldeni" szimulátorban... valakinek valami jó ötlet?
jtag+avrstudio? abból csak jtagice+avrstudio4 van..5-6-os nem támogatja a régi jtagice-t
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Bascom, JTAG plusz AVR-Studio szimulátora...

Ill serialdebug:).
Avatar
Marvinn
Tranzisztorgyógyász
Hozzászólások: 153
Csatlakozott: 2008. július 24. csütörtök, 6:00

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

Robert írta:Bascom, JTAG plusz AVR-Studio szimulátora...

Ill serialdebug:).
próbálkozok jtagice +avrstudio,
importálom is fut is a program de hogy tudom a változók értékeit megtekinteni? watch-nál belerakom a listába de "Not in scope"
Avatar
Marvinn
Tranzisztorgyógyász
Hozzászólások: 153
Csatlakozott: 2008. július 24. csütörtök, 6:00

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

Következőt írja az avrstudio4:
JTAG ICE: Warning: Reading the program counter, an invalid value (0x7FFFFFFF) was received from the device.


signeture-t olvassa, fuse biteket is olvassa, tehát a lábkiosztás jó lehet, OCDEN bekapcsolva...
Avatar
boczhunor
Bitmanipulátor
Hozzászólások: 110
Csatlakozott: 2009. augusztus 5. szerda, 6:00

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

HY all my Gadgeteers! :wink:

Nos, igen, ahogy kapu48 mondta az adatellenőrzés fontos... Nos én ajánlanék egy bizonyos elgondolást, amely legegyszerűbbek közé tartozik. RFID-nél meghatározott 10-es adatcsoportok vannak, de ez igény szerint csökkenthető, növelhető... Most egy 10-est vettem példának...

111111111 (start bitek - küldés kezdetének definiált bitcsoportja)

(Alább pedig magátt a 15 adatcsoportot küldjük el, melyben az első 4 bit az adat, az utolsó bit a küldés helyességét ellenörző paritás bit...)

11110
10100
10001
11000
10010
11101
11110
00000
00011
01010

(Majd elküldjük az oszlop paritás biteket, amelyek a fenti adatbitek, felülről lefele haladó függőleges, soronkénti párosságát ellenőrzik, az első adatcsoporttól a 10.-ig...)

1101

(Végül pedig a transzmisszió lezárulását jelző 0 stop bitet)

0

A fontos, hogy ezt a HopeRF modulja SPI-n keresztül ennyire egyszerűen nem valósítja meg, figyelembevéve, a belső adatszerkezet igényességét, mivel különböző deklarációs típusokat vesz figyelembe... Viszont itt a FIFO-nak nagy hasznát veszed, mert a fenti példával élve, a fenti adatdaraboltságot, az adatvermek adattárolási sorrendjét figyelembevéve, olvashatod ki őket. Pl. ha a 15-ös számot küldöd, ami 1111, akkor ezt menti az egyes számú adatveremben, viszont nekünk a fenti példában 10 adatveren van, és azokat alapértelmezésből lenullázza a programod, mert az adat nem olyan hosszú, hogy ezeket is lefoglalná. Az adatküldnésnél az Elsőnek-be Elsőnek-ki műveletezés, a 15-ös elsődleges memóriafoglalat adatot kiküldi, aztán az elkövetkező 9 elemet a 0-ázási stop bittel helyettesíti, ezért úgymond megszűnik az adatbedogadás, ami mindenféleképpen jó az interferencia elkerülése és a helyes adattovábbítás szempontjából, ezt még az oszlopos paritás bit is támogatja... Ezért szerintem a Datashett átolvasása után ajánlanám, hogy fussd át például az Arduino-ra készült különböző RFM12 könyvtárakat és próbáld átvinni a dolgokat a moduláris programozás eszközeivel, melyek a Bascom-ban is megvannak, Bascom kódra... A következő linkeken találsz infókat és könyvtárakat: link1, link2....

Sajnos én a Bascom-ot nem értem ezért főleg ott sok beleszólásom nincsen, de ha esetleg problémád akad az Arduino-s dolgok értelmezésében, gondolok, itt például a fenti linkek könyvtári funkcionalitására stb. akkor BFF! :wink:

Bocz Hunor-Chris :roll:
Avatar
Marvinn
Tranzisztorgyógyász
Hozzászólások: 153
Csatlakozott: 2008. július 24. csütörtök, 6:00

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

változókat továbbra sem tudok nézegetni: Not in scope
erre van megoldás?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Bocsi! De igazán nem értem mit is akarsz?
Bascom kódot akarsz AVR STÚDIÓ-val debugolni?


A lefordított HEX vagy BIN állományban már nincsenek benne a változó nevek.
Csak a címük alapján hivatkozhatsz rájuk. már aminyiben ismered a címet, ahova a fordító rakta őket.
8)
Avatar
Marvinn
Tranzisztorgyógyász
Hozzászólások: 153
Csatlakozott: 2008. július 24. csütörtök, 6:00

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

igen igen AvrStudioval debugolni... bascom fordítónál be van kapcsolva az AvrStudio Object File, azt importálom AvrStudioba és így debugolni. viszont Not in scipe minden változó, azt meg nem találtam meg AvrStudioban hogy hol lehet megadni nézegetésre a változók nevét,típusát,címét.. ezt meg a Bascom fordítás utáni summaryból tudom..

AvrStudioban hol lehet megadni a nézendő változó címét?
kapu48 írta:Bocsi! De igazán nem értem mit is akarsz?
Bascom kódot akarsz AVR STÚDIÓ-val debugolni?


A lefordított HEX vagy BIN állományban már nincsenek benne a változó nevek.
Csak a címük alapján hivatkozhatsz rájuk. már aminyiben ismered a címet, ahova a fordító rakta őket.
8)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Látom, most ráérsz!
Javaslom, írd meg ezt részletesen!
Mit, hogyan és miért csinálsz?

(Ne mindig csak kérdez! Valamikor már te is segíthetsz a másik kezdőnek!)
És közben lehet, hogy valakinek beugrik a megoldás a problémádra!
:idea:
Válasz küldése