Kodowanie Machester w Bascom jak?


Witam

Tak jak w temacie jak rozwiazac problem kodowania manchester w bascomie, zaczne od tego ze mam taki przykladowo ciag bitów:

dane do zakodowania:

1001100

zrobie negacje i uyskam:

0110011

Zgodnie z kodowaniem manchester wygladac to powinno nastepujaco: 10010110100110 (na podstawie: http://pl.wikipedia.org/wiki/Kod_Manchester)

Polecania operacji na bitach znam jednak nie moge sobie z tym poradzic, probowalem operacji OR lub XOR jednak bez pozytywnego rezultatu. Na piechote moglbym to zrobic poleceniem MID z kowersjami na odpowienie dane (strin/byte) tylko ze zajmie to sporo czasu gdyz opeacje musze wykonac na ramce danych w postaci 64 bitów, w rezultacie na wyjsciu musze uzyskac 128bitów w postaci kodu Manchester. Jak to zrobic ekonomicznie i estetycznie zarazem.




Portret użytkownika rafliczek22

W czym programujesz zdaję mi

W czym programujesz zdaję mi się po cichu że w asmie czyli nie pomoge natomiast w c lub bascomie można to zróbić, i wypadało by użyć timera ale to da rade do 16bit, w innym wybadku przychodzi mi na myśl wykorzystanie tylko PCINT i po każdym przerwaniu czytać stan portu.

P.s. Co chcesz na 64-bitach przesyłać, z czystej ciekawości.

Portret użytkownika kakalia

Hej Bascom oczywiscie,

Hej

Bascom oczywiscie, narazie pominmy prosze kwestie transmsiji, chodzi o uklad EM4095. Dane moge podzielic w paczki po 8bitow na potrzebyw konwersji do Manchestera. Mam taki pogramik tylko nie dzialka tak jak powinien chyba ze ja cos zle robie (bazowalem na http://evertdekker.com/Joomla/index.php?option=com_content&task=view&id=56&Itemid=84).

$regfile = "2313DEF.DAT"
$baud = 19200
$crystal = 7362700
 
 
Declare Function Make_manchester(byval Temp As Byte) As Word
 
  Dim Lus As Byte
  Dim Tempword As Word
  Lus = 5
 Print Bin(lus)
Do
 
   Tempword = Make_manchester(lus)
   Print Bin(tempword)                                      '
 
 
Loop
 
 
End
 
'  'Subroutines
Sub Make_manchester(byval Temp As Byte) As Word
Local Bit_number As Byte
Local Manchester As Word
Bit_number = 8
Do
Shift Manchester , Left , 2
Decr Bit_number
If Temp.bit_number = 1 Then
Manchester = Manchester + 1                                 '01
Else
Manchester = Manchester + 2                                 '10
End If
Loop Until Bit_number = 0
Make_manchester = Manchester
End Sub
 
Return

dane wejsciowa to : 101
na wysciu powiniem otrzymac: 100110

natomiast to dostaje w symulatorze:
(pierwszy print wartosc 5): 00000101

(niby manchester ale z bledami): 0000001011100110

Portret użytkownika rafliczek22

Ale czytać czy nadawać, i jak

Ale czytać czy nadawać, i jak ty chcesz ogolnie nadawać bo chyba nie rsem zaraz dokładnie czytne co to za układ, ale NADAWAĆ to trzeba na jakimś osobnym pinie a nie rsem, natomiast ODBIERAĆ na przerwaniu zewnetrznym (gorzej) lub na wejsciu input capure(ICP).

Portret użytkownika kakalia

Pomin nadawanie/odbieranie bo

Pomin nadawanie/odbieranie bo to malo istotne w tej chwili. Mozesz pomoc z tym kodem Manchester zeby dzialal prawidlowo ??
Print tam wstawilem zeby widziec co sie dzieje, zeby ruszyc na przod musze miec opanowany Manchester.

Portret użytkownika gosc

Witam! trochę stary wątek

Witam!

trochę stary wątek ale zapytam czy autor poradził sobie z manchester'em i czy podzielił by się kodem ??
staram się zbudować bezprzewodową czujkę temperatury n a1-wire i odbiornik do tego na 2 x Attiny.