Sida 1 av 2

RF Moduler och Basic Stamp

Postat: 29 november 2008, 20:51:00
av mikr
Jag köpte en Tx och en Rx RF-modul på Kjell & Co (
www.kjell.com/?item=88901&path= och
www.kjell.com/?item=88900&path=) och kopplade in dessa enligt beskrivning. Gjorde ett enkelt program för test men jag får det inte att fungera. Båda Stamparna är plain BS2.

Sändardelen på en Stamp:

Kod: Markera allt

Baud  CON 16780   ' NI 2400

Tx     PIN 0
n      VAR Byte
Sync   CON "A"

DIRS = %11111111

Main1:
   FOR n = 1 TO 255
       SEROUT Tx, Baud, [DEC n, Sync]
       DEBUG "Skickat: ", DEC n, CR
       PAUSE 50
   NEXT
   GOTO Main1
Mottagardelen på en annan Stamp

Kod: Markera allt

Baud  CON 16780   ' NI 2400

Rx     PIN 15
Result VAR Byte
Sync   CON "A"

DIRS = %11111111


Main1:
   SERIN Rx, Baud, [WAIT(Sync), DEC Result]
   DEBUG "Mottaget: ", DEC Result, CR
   GOTO Main1
Mottagaren tar inte emot de värden jag skickar utan visar helt andra värden...
Vad är det jag gör för fel?

Postat: 29 november 2008, 21:21:52
av peter555
Det är ASK så du borde klara dig utan NRZ och preamble. Vad jag förstår av databladet för mottagaren så vill den ha 4.8 kb/s men du verkar köra 2.4 kb/s.

Funkar programmet med en kabel mellan stamparna ?

Postat: 29 november 2008, 21:29:40
av Icecap
De klarar MAX 4800 baud.

Men räkna INTE med att de fungerar bra! Främst är de rena skitmoduler och ska man ha någon form av "säkerhet" i kommunikationen SKA man köra med preample, CRC och rubbet men till en initial test kan man köra "rått".

Och VARFÖR det inte fungerar? Har du kollat att modulen alls reagerar?

Ett tips är att en seriell utgång är '1' i viloläge, altså MÅSTE man ha preample på för att få liv i det hela, alternativet är att invertera alla sända och mottagna data.

Postat: 29 november 2008, 21:50:57
av peter555
Jag tycker databladen på modulerna är mycket otydliga och svårtolkade. Dock verkar kodkretsarna de föreslår köra utan vare sig preamble eller NRZ så det borde fungera. Om man orkar så går det att räkna ut vilken datahastighet som körs med dom.

Icecap: Varför måste man invertera data om man startar med en 1a ?

Postat: 29 november 2008, 22:11:18
av Icecap
'1' = modulen sänder.

Mottagaren kommer då att hitta sin "DC-balans" på detta nivå vilket gör att när mottagaren sedan skickar startbit ('0') kommer sändaren att sluta sända, alltså kommer startbitten inte att avkännas.

Om man använder speciella "adresskretsar" använder de oftast '0' som viloläge och '1' som aktivt läge, alltså PRECIS motsatsen till en UART.

Postat: 29 november 2008, 23:20:02
av haklu
Kodkretsarna som föreslås representerar 1 och 0 på följande sätt: (försöker mig på lite asciigrafik...)

Kod: Markera allt

|   |   |   |   |   |   |   |   |   |
         ___     _______
________|   |___|       |____________

|-----1-----|-----0-----|---vila----|
Någon som vet vad den kodningen kallas förresten?

Ser riktigt fint ut på oscilloskopet även på hundra meters avstånd från sändaren. Dock kan man knappast lita på att alla data kommer fram för rätt var det är så är den något annat som sänder på 433 MHz och stör.

Sedan kan man konstatera att om man ligger och sänder konstant så får man svårt att låsa/öppna bilen med fjärren och man tappar kontakten med den trådlösa utetermometern osv. Så de passar nog bäst till att skicka korta meddelanden hyfsat sällan och då skicka meddelandet flera gånger och helst med någon felrättande kod.

Postat: 29 november 2008, 23:40:38
av vfr
Kodkretsarna som föreslås

Vilka syftar du på då? Det har, vad jag kan se, inte pratats om några kodkretsar i tråden så här långt, bara själva sändar och motagarmodulerna. Fast många kodkretsar gör så som du beskriver. Eller kanske med 25/75% dutycykel isf 33/66% som du ritade.

Postat: 29 november 2008, 23:53:56
av haklu
Ah, jag var lite otydlig. Jag syftar på de kodkretsar (HT12E och HT12D) som föreslås i databladet till sändaren och som jag antar att peter555 också syftade på.

Postat: 29 november 2008, 23:55:30
av peter555
Ja det har du rätt i, det var länge sedan jag höll på med RS232, det är startbitar och krafs.

Den uppmätta sekvensen tyder på att modulerna inte gillar alltför stor DC-obalans heller.

Hur fixar man NRZ från en vanlig UART ?

Postat: 30 november 2008, 00:01:51
av vfr
Ok, då är jag med. Fast om jag inte minns fel så använder dom just 25/75% duty, men det är ju iofs marginell skillnad. Principen är ju densamma.

Postat: 30 november 2008, 00:07:43
av haklu
Nej, det är 33/66 (även enligt datablad)

Postat: 30 november 2008, 00:20:27
av vfr
Ok. Då minns jag fel.

Postat: 30 november 2008, 08:58:00
av Icecap
haklu: varför vill du använda de kodkretsar? Du skriver ju att det är BS som ska klara biffen eller hur?

Faktum kvarstår: det är billiga moduler med allt som tillhör kategorien "billigt".
* Man kan inte byta kanal.
* Kanalseperationen är "begränsat" (nu var jag snäll)
* Ingen preample eller annan "automatik".
* AM modulation.

Men visst, har man lågt ställda krav kan de fungera ganska bra.

Med preample setter man dels DC-nivån i "data-slicen" och dels kan man använda den till att identifiera sändaren. Jag hade i sin tid ett projekt som använde moduler utan automatik i, där var min preample bara ett antal pulser med en viss frekvens, sedan kom det en '1' med dubbla pulsbredden och sedan en '0' med samma data. Därefter skickade jag data i form av 2 bytes á 8 bit, detta kunde ge en DC-obalans så jag räknade antal '0' och '1' och skickade sedan en 3-dje byte med "korrigeringsdata" för att uppnå OK DC-nivå (30-70% var OK).

Detta gjorde jag med en PIC och det fungerade alldeles OK.

Jag skulle (/kunde?) dock inte göra det med en BS, jag använde ju inte en UART-funktion, jag använde en timerinterrupt istället.

Så vill du skicka korta meddelanden: invertera datan i båda ändar och acceptera störningar.

Postat: 30 november 2008, 12:29:43
av peter555
Frågan är om invertering räcker, klarar modulerna icke NRZ-data ?

Annars får han väl sänga bara AA och 55 som data. :)

Postat: 30 november 2008, 12:37:51
av Icecap
peter555: vad skulle inte klara det?