Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Obsługa Magistrali I-Bus BMW w Bascom?

CrisELDi 27 Kwi 2012 21:31 22074 57
  • #1 27 Kwi 2012 21:31
    CrisELDi
    Poziom 14  

    Witam serdecznie

    Od kilku dni zastanawiam i szukam informacji czy mikro kontroler w języku bascom jest wstanie odebrać z magistrali ramkę/dane z informacją np: o wciśniętym przycisku Vol+... i wyświetleniu je na własnym LCD ? Taki mały analizator I-bus.

    Wiem jak wygląda ramka np:

    Obsługa Magistrali I-Bus BMW w Bascom?Obsługa Magistrali I-Bus BMW w Bascom?

    Opis Adresy z danymi i ich Zadania:

    Obsługa Magistrali I-Bus BMW w Bascom?
    IBUS . Na przykład górna linia jest 0x50 0x04 0x68 0x28 0x2F 0x3B.
    - 1. Pierwszy bajt jest Identyfikator/adress źródła, w tym 0x50 w przypadku który jest MFL / kierownicy,
    - 2 Bajt 0x04 oznacza ile jest bajtów samej wiadomości.
    - 3 Bajt, 0x68, który jest radio adres docelowy.
    - 4 Bajt i 5 Bajt są wiadomości, w tym przypadku 0x3B i 0x28 co oznacza przycisk Poprzedni "<<"
    - 6 Bajt sumy kontrolnej. Więc XOR'ing 0x50, 0x04 i 0x68 i 0x3B i 0x28 równe 0x2F, wartość sumy kontrolnej. Jeśli XOR sumę kontrolną z resztą wiadomości otrzymasz 0x00. Wszystko inne niż zero oznacza suma kontrolna nie zgadza i cały komunikat powinien zostać zignorowany.


    Ktoś to już zrobił i opisał wszystko jak to działa ale nie podał kodu źródłowego ... ale to chyba było w C nie znam c wiec nawet nie wiedział bym co do czego.

    Obsługa Magistrali I-Bus BMW w Bascom?Obsługa Magistrali I-Bus BMW w Bascom?

    Jak widząc można wykonać projekt ale autor już go nie kontynuuje. Czy jest ktoś kto bym choć troszkę podpowiedział jak odebrać z i-BUS poprzez RX dane w w języku Bascom? Sam Interfejs Ibus działa na PC i jest taki sam jak na schemacie.
    Która instrukcja się nadaje: Input, Inputbin, InputHex lub funkcja Waitkey[], InKey[].

    Jestem chyba wstanie skonfigurować transmisję UART-u

    Każda sieć (K-bus,I-Bus, L-Bus) przesyła dane o szybkości transmisji 9600 bitów na sekundę. Protokół komunikacyjny jest 8 bitów danych, 1 bit stopu

    Dziękuje serdecznie za wszelkie podpowiedzi.

    0 29
  • #2 28 Kwi 2012 22:11
    FastProject
    Poziom 28  

    Wszystko zależy od programisty. Te komendy i stany z szyny, znając ramkę (a widać znasz ją) są do odczytania w dowolnym mikrokontrolerze zaprogramowanym w Bascomie czy jakimkolwiek innym języku.

    Ja do odbioru osobiście wybrałbym instrukcje Inputbin.

    Jeśli twierdzisz, że chyba potrafisz skonfigurować UART, to podejrzewam,ze jeszcze długa droga przed tobą.

    0
  • #3 29 Kwi 2012 02:25
    marcinkbig
    Poziom 11  

    mam taki sam pomysl potrzebuje odczytac pare rzeczy (a duzo informacji tam 'przeplywa')
    narazie mam atmega16 i wyswietlacz i prosty uklad na tranzystorze do dopasowania napiec miedzy ibus a atmega
    jak przyjde do domu to wkleje maly schemat
    sorry za pisownie ale pisze z telefonu

    0
  • #4 29 Kwi 2012 13:19
    CrisELDi
    Poziom 14  

    Witam

    No niestety nie posiadam żadnej wielkiej wiedzy o tematyce bascom jedynie co znam to fragmenty samego bascom które w tym przypadku chwiałbym połączyć w całość i uzyskać jeden mały efekt ...

    Wiec w dalszym ciągu zwracam się i małe instrukcje...


    Cieszy mnie to ze ktoś się dołącza do pomysłu może jednak coś z tego będzie ...

    Obsługa Magistrali I-Bus BMW w Bascom?Obsługa Magistrali I-Bus BMW w Bascom?

    A interfejs I-Bus BMW jest kilka w tym ten z tranzystorami ale on nadaje się tylko do analizy gorzej wychodzi wysłanie ramki na i-Bus czasem działa czasem nie a chodzi o obsługę błędów transmisji I-bus czego nie obsługuje ten interfejs na tranzystorach. Co innego kolejny schemat który całkowicie współpracuje z magistralą ale jedna wada to ciężko go zdobyć TH3122....

    Ale to przede mną zacznijmy może od odebrania sygnału? Ja osobiście czekam na lcd do płyty testowej ... oraz na Rs-Max232...

    poz.

    0
  • #5 29 Kwi 2012 14:51
    marcinkbig
    Poziom 11  

    Witam
    Namalowałem w paincie jak to wygląda w mojej wersji
    Obsługa Magistrali I-Bus BMW w Bascom?

    Na razie zależy mi tylko na samym odbieraniu a jest to łatwiejsze.
    atmege mam taktowaną z wewnętrznego rezonatora 8mhz (czytałem ze jakbym chciał wysyłać to już potrzebuję zewnętrzny rezonator i program napisany tak aby nie wysyłał nic do szyny ibus w momencie gdy inne urządzenie coś wysyła)
    Układzik na tranzystorze jest do dopasowania sygnałów między ibus a atmegą oraz odwróceniem tego sygnału, na szynie ibus logiczne 0 odpowiada napięcie 12v a logicznej 1 napięcie bliskie 0v.
    Obecnie jestem na etapie sprawdzania tego układu na bc 547, nie mam nic konkretnego napisanego.
    Obecnie nie zależy mi na jakiś układach do obsługi tej szyny jak th3122 choć mam stare radio do bmw i w nim jest układ elmos 10020b (coś jak th3122).

    pzdr

    0
  • #6 29 Kwi 2012 16:23
    CrisELDi
    Poziom 14  

    No to super tylko przedstaw swojej pracy efekty co i jak mam jeszcze jeden bardzo mały prosty Interfejs I-Bus z poprzedniego postu ...

    Obsługa Magistrali I-Bus BMW w Bascom?

    Według autora działa prawidłowo do odczytu ... No nic czekam na podzespoły i spróbuje wyczytać coś z tej magistrali ... Układu podobny temu "TH3122" to na pewno musi być zajrzę do radia zobaczę co tam znajdę dzięki za pomysł.

    ...

    1
  • #7 29 Kwi 2012 16:55
    marcinkbig
    Poziom 11  

    widziałem ten układ ale musiałbyś w bascomie wpisać aby sygnał odwracał programowo (niewiem czy coś takiego się da) bo jak pisałem w szynie ibus logiczne zero"0" to napięcie 12v a jedynka logiczna "1" to napięcie bliskie zeru
    a w tym interfejsie co pokazałeś to miałbyś w atmedze zamiast "1" to logiczne zero "0".
    Obecnie nie mam nic napisanego tylko prosty program do sprawdzenia czy poprawnie jest odwracany sygnał
    nie wiem jak zacząć aby mieć coś takiego
    Obsługa Magistrali I-Bus BMW w Bascom?
    ramki mają różną długość (5-30ms) i są rozdzielone różnym czasem "ciszy"

    0
  • #8 29 Kwi 2012 21:08
    CrisELDi
    Poziom 14  

    Jak najbardziej to prawda ale bym utopił. Skorzystam z twojego interfejsu ale jeszcze został mi ten tranzystorowy działa na pc czyli na mikro kontrolerze także....

    Może jednak ktoś podpowie jak to ugryźć od strony programu ... ?

    poz.

    0
  • #9 30 Kwi 2012 00:03
    marcinkbig
    Poziom 11  

    na komputerze ci dziala ten interfejs ibus pod rs232 ale nie zadziala pod atmega chyba ze wstawisz max232 miedzy ten interfejs a atmege
    w rs232 masz jeszcze inne napiecia cos od -12v do +12volt
    najprosciej dac wlasnie taki prosty uklad na jednym tranzystorze jaki pokazalem lub zrobic dzielnik na opornikach i 'programowo' odwrucic sygnal
    ps. Pisze z kalkulatora ;)

    0
  • #11 05 Maj 2012 22:50
    pacraf
    Poziom 16  

    a chcesz napisac soft który zareaguje na konkretną ramkę? np kiedy odbierze 80 04 BF 11 00 2A ma wyłączyć twojego subwoofera?

    czy też chcesz napisac prawdziwą stację ibus z kontrolą ramki, dekodowaniem ?

    pzdr

    0
  • #12 05 Maj 2012 23:16
    marcinkbig
    Poziom 11  

    na początku wystarczył by soft co zareaguje na daną ramke ale przydało by się tez kontrolować sume kontrolną xor ramki

    0
  • #13 13 Maj 2012 00:16
    CrisELDi
    Poziom 14  

    Witam

    Ja znalazłem trochę czasu i złożyłem interfejs według oryginalnego ale bardzo prostego projektu Kevin White. + Max 232 + przejściówka USB/COM.Przetestuje go na bardzo prostym programie aby upewnić się że działa poprawnie. NavCoder v2.1.1 oraz IBUS communication Manager v1.0.19

    Obsługa Magistrali I-Bus BMW w Bascom?

    Aby się podłączyć do I-Bus można skorzystać z Kabla zmieniarki CD Bmw:
    - Brązowy - Minus
    - Czerwony - Plus
    - Biały- i-bus

    Obsługa Magistrali I-Bus BMW w Bascom?

    Zobaczymy co z tego wyjdzie ...

    0
  • #14 16 Maj 2012 19:46
    marcinkbig
    Poziom 11  

    aktualnie zrobiłem taki oto układzik do dopasowania poziomów napięc i "odwrócenia sygnału"

    Obsługa Magistrali I-Bus BMW w Bascom?

    a program w bascomie tylko liczy ile razy się zmienił stan na wejsciu RXD

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    układzik i program testowy działa
    teraz musze napisać reszte :)

    0
  • #15 05 Cze 2012 20:19
    marcinkbig
    Poziom 11  

    kolego CrisELDi jak u ciebie postępy bo u mnie to słabo
    próbowałem różnych poleceń w bascomie (inkey, input itd) aby odczytać coś z tej lini danych

    nawet nie wiem czy dobrze zrobiłem ten interfejs ze odwraca sygnał, autor projektu podobnego ale na microchipie nie odwraca sygnału
    Obsługa Magistrali I-Bus BMW w Bascom?

    czasami udało mi się coś odebrać ale zupełnie innego

    np. wzoruje sie na naciśnięciu na pilocie otwierania bagażnika
    wtedy na lini pojawiają się dwa kody (odczytałem je interfejsem na kompa)takim

    Obsługa Magistrali I-Bus BMW w Bascom?

    oto te dwa kody
    00 05 BF 7A 90 20 70
    00 05 BF 7A 10 20 F0

    a takie cos mi czasem wypluwało
    194224121240
    42491954234224124525
    2881242521240
    2342881242521240
    2342881242492274 2342881242521240

    ea 02 58 7c f9 e3 04 ea0258 7cfc7c00

    234 2 88 124 2521240

    proszę o pomoc
    jak napisać program aby odczytywał te linie i wypluwał ten hex na lcd

    Dodano po 4 [godziny] 53 [minuty]:

    znalazłem jeszcze coś takiego na arduino
    ale jak to zapisać pod bascomem ???

    Kod: text
    Zaloguj się, aby zobaczyć kod

    0
  • #16 06 Cze 2012 08:37
    marcinkbig
    Poziom 11  

    bingo
    napisałem już program który pokazuje odebrane sygnały z ibus szyny
    błędnie myślałem ze trzeba odwrócić sygnał, zastosowałem interfejs od gościa który zrobił takie coś na microchipie czyli tylko dioda i opornik (u mnie 1n4148 i 10k)

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    program jest napisany na odebranie zawsze 7 bajtów niewiem co się stanie jak odbierze wiecej lub mniej

    1
  • #17 06 Cze 2012 12:15
    snnaap
    Poziom 25  

    Aby nie dochodziło do błędów związanych z odbiorem mniejszej czy większej liczby bajtów musisz zastosować jeden myk.
    Wiedząc jaki czas jest pomiędzy nadawaniem poszczególnych bajtów oraz jaki czas jest pomiędzy poszczególnymi ramkami złożonymi z 7 bajtów musisz podczas odbioru 1 bajtu włączyć timer który złogi przerwanie po czasie który jest potrzebny na odbiór 7 bajtów.
    Jeżeli w tym czasie zostanie odebranych 7 bajtów i suma kontrolna jest prawidłowa oznacz to że ramka jest ok.
    Jeżeli został przekroczony czas odbioru ramki lub suma kontrolna jest nieprawidłowa ignorujesz taką ramkę.

    0
  • #18 06 Cze 2012 12:36
    lukapt
    Poziom 11  

    Witam,

    snnaap napisał:
    Aby nie dochodziło do błędów związanych z odbiorem mniejszej czy większej liczby bajtów musisz zastosować jeden myk.
    Wiedząc jaki czas jest pomiędzy nadawaniem poszczególnych bajtów oraz jaki czas jest pomiędzy poszczególnymi ramkami złożonymi z 7 bajtów musisz podczas odbioru 1 bajtu włączyć timer który złogi przerwanie po czasie który jest potrzebny na odbiór 7 bajtów.
    Jeżeli w tym czasie zostanie odebranych 7 bajtów i suma kontrolna jest prawidłowa oznacz to że ramka jest ok.
    Jeżeli został przekroczony czas odbioru ramki lub suma kontrolna jest nieprawidłowa ignorujesz taką ramkę.


    A dlaczego nie wykorzystać tego, że w ramce jest podana długość wiadomości (drugi bajt)?
    odbierz 1 bajt
    odbierz 2 bajt - sprawdź długość danych
    dla x=0 --> x= długość danych-1 odbieraj bajty

    narazie to tylko pomysł, bo sam zamierzam zbudować sobie proste urządzenie na I-Bus. Potrzebuję tylko kopa, by się zabrać.

    I jedna prośba jak piszecie ramki z I-BUS'a to podajcie model auta (E38, E46, itp), ponieważ każdy ma inne kodowanie.

    0
  • #19 06 Cze 2012 18:17
    marcinkbig
    Poziom 11  

    lukapt
    program pisze dla E39
    dobry pomysł z tym wykorzystaniem drugiego bajtu ale
    program z automatu wpisuje wszystkie bajty do zmiennej serial_rx

    Inputbin Serial_rx(1) ; 1 'przypisz dane z bufora do tablicy startujac od pierwszego byte-u

    nie jestem dobry w pisaniu pod bascomem więc każda pomoc się przyda
    napisałem sobie jeszcze taki program który pokazuje prędkosc i obroty auta
    ramka wygląda tak
    80 05 BF 18 ss rr cc
    gdzie ss to prędkość (wartość w hex trzeba pomnożyć przez 2)
    rr to obroty (dodać do wyniku 100)
    a cc to suma xor

    np. szyna wysyła taką ramke 80 05 bf 18 00 00 22 czyli silnik wyłączony
    a np taka wskazuje 80 05 bf 18 00 07 25 prędkość 0 obroty 700.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
    If Kos1 = 128 And Kos2 = 5 And Kos3 = 191 And Kos4 = 24 Then 'sprawdza czy pierwszy bajt ramki to 128 hex(80 ) drugi to 5 trzeci 191 i czwarty 24 wtedy
    Pr = Kos5 'wpisuje z bajtu 5 do zmiennej prędkosc
    Obr = Kos6 'oraz obroty
    Pr1 = Pr * 2 'prędkość trzeba pomnożyć przez dwa
    Obr1 = Obr * 100 'a obroty przez 100
    Cls
    Locate 1 , 1 'jeszcze raz pokaż po czyszczeniu ekranu ostatnio odebrane znaki
    Lcd Hex(kos1) ; " " ; Hex(kos2) ; " " ; Hex(kos3) ; " " ; Hex(kos4) ; " " ; Hex(kos5) ; " " ; Hex(kos6) ; " " ; Hex(kos7) 'na pierwszej lini tak kontrolnie cała ramka
    Locate 2 , 1
    Lcd Pr1 ; " km/h " ; Obr1 ; " rpm/min"

    Waitms 100
    Else
    Locate 2 , 1
    Lcd Pr1 ; " km/h " ; Obr1 ; " rpm/min"

    End If
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    może bufor odczytu dać dużo większy jak 7 bajtów oraz zmienną tablicową serial_rx także a potem odczytywać tylko co potrzebujemy (ale niewiem do końca jak działa inputbin)

    0
  • #20 13 Cze 2012 19:59
    CrisELDi
    Poziom 14  

    Witam widzę ze koledzy polecieli z tematem ostro tym samym pomagając mi co nieco z tym problemem jak tylko znajdę jeszcze czasu to atakuje temat ... a tym czasem prosił bym o full Kod do tego wyświetlacza prętkości ... autora "marcinkbig" bo ja muszę spróbować do E46 i czy działa?

    Z góry podziękowania koledzy ...!

    0
  • Pomocny post
    #21 15 Cze 2012 19:03
    marcinkbig
    Poziom 11  

    powinien w e46 ten kod działać
    to co dałem na forum wyżej to praktycznie full kod bez wpisania pod które piny jest podłączony wyświetlacz itp.

    0
  • #22 15 Cze 2012 21:58
    CrisELDi
    Poziom 14  

    Witam

    Przed wszystkim podziwiam za pomysły! Niestety ale moja znajomość języka bascom jest kiepska i tylko twoje projekty pomogły mi co nieco zrozumieć dlatego jak mogę prosić o ewentualne poprawki twojego projektu ... bo chyba poknociłem co nieco niema błędu projekt kompiluje się? Postaram się pomóc przynajmniej w testach. Jeszcze raz podziękowania porostu dobra robota...

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Obsługa Magistrali I-Bus BMW w Bascom?

    I rozumiem że wykorzystujesz tylko diodę i rezystor w tym projekcie.

    poz.

    0
  • Pomocny post
    #23 15 Cze 2012 23:04
    marcinkbig
    Poziom 11  

    Dzięki za pochwałę
    do wejscia RXD mam podłączoną diode i opornik jak w pierwszym poście tylko ze dioda to 1n4148 a opornik ten sam czyli 10k
    wpiołes sie dobrze w szyne ibus
    ale widze ze masz dużo błędów w programie np brak pętli itp
    osobiście robię projekt na atmega16 który będzie pracował w roli tempomatu i obecny kod mam bardzo rozkopany postaram sie go okroić i wkleić cały

    0
  • #24 15 Cze 2012 23:40
    CrisELDi
    Poziom 14  

    Dzięki z góry za pomoc.
    Będę oczekiwał na kod.
    Na pewno pomoże mi to kupę zrozumieć. Moje główne zadanie jest odebranie ramki dotyczącej przycisku telefon r/t i wykonanie jakiejś funkcji na PCu ale to pestka ogólnie chciałbym to zrozumieć.

    poz.

    0
  • Pomocny post
    #25 15 Cze 2012 23:47
    marcinkbig
    Poziom 11  

    tak wygląda sam kod do odczytu predkośći "trochę nie ogarnięty sorki"

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #27 16 Cze 2012 22:26
    marcinkbig
    Poziom 11  

    CrisELDi działa już ci ten kod
    Obecnie tworzę tempomat używając właśnie szyny ibus i oryginalnego silniczka tempomatu
    płytkę mam już skompletowaną pozostało wytestować poprawne sterowanie silniczka atmegą oraz oczywiście program
    zawsze chciałem podłączyć np. atmege z ibusem, bo wiedziałem jak wiele różnych możliwośći można wtedy uzyskać (w e46 więcej)
    szkoda ze nie mam więcej czasu :(

    0
  • #28 18 Cze 2012 11:09
    CrisELDi
    Poziom 14  

    Postaram sie przetestować jak najszybciej ale mam naradzie urwanie głowy w robocie i kompletny brak czasu ale z ciekawości chialbym jak najszybciej tylko muszę sprawdzic czy e46 ma ten sam kod ale i tak spróbuje odczytać wciskane przyciski r/m po przerobieniu kodu...
    Poz.

    0
  • #29 18 Cze 2012 14:10
    marcinkbig
    Poziom 11  

    na necie znajdziesz jaki kod ma przycisk r/m na kierownicy
    jedne przyciski wysyłają inny jak jak naciśniesz przycisk inny gdy go trzymasz ponad 1 sekunde i inny jak puścisz
    wkleiłbym parę stron z kodami ale do tej pory dostałem już parę ostrzeń itp, tylko w tym temacie :)

    0
  • #30 24 Cze 2012 01:23
    CrisELDi
    Poziom 14  

    Witam

    Obsługa Magistrali I-Bus BMW w Bascom? Obsługa Magistrali I-Bus BMW w Bascom?Obsługa Magistrali I-Bus BMW w Bascom?

    Trochę pogrzebałem i napotkałem kilka problemów pierw to kod prawdo podomnie mój procek jest za mały

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Rozmiar powinien być na 100 ale nie da rady za mało pamięci

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Tu jest jakiś błąd bo nie pójdzie z tym
    Nie wiem czy bez tych kilku rzecz projekt nie zadziała?

    Nie sprawdzałem w samochodzie co zrobiłem to posłużyłem się programem I-BUS analizator BMW i poprzez USB->RS232->MAX232->RX -> RXAT -> LCD zacząłem wysyłać komunikat o prędkości (80 05 bf 18 00 07 25) ale At-y nie odczytał jedynie co widać to migający komunikat LCD "km/obroty" podczas transmisji kodu
    Dodatkowo port RX monitorowałem analizatorem UART i kod widzę jak jest wysyłana na RX
    Nie wpinałem w układ małego interfejsu [dioda i rezystor] przed RX At-y

    Tu jest kod może jednak coś pochrzaniłem?

    Poz.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  Szukaj w 5mln produktów