Professional Documents
Culture Documents
AVT5562
AVT5562
multiTID – wielofunkcyjny,
samochodowy komputer
pokładowy (1)
Kilkakrotnie podejmowałem wyzwanie zaprojektowania komputera pokładowego i to zarówno takiego, który
korzysta z oryginalnego, wbudowanego w deskę rozdzielczą wyświetlacza pokładowego, jak i własnego LCD,
OLED czy TFT. Korzystając z doświadczenia, które zdobyłem projektując wspomniane urządzenia, postanowi-
łem zbudować komputer pokładowy będący syntezą wcześniej zastosowanych rozwiązań, lecz wyróżniający się
największą i niespotykaną w innych rozwiązaniach funkcjonalnością. Miał to być komputer, który „tchnie” nowe
życie w starsze pojazdy. MultiTID, czyli urządzenie, o którym mowa, ma możliwość współpracy z oryginalnymi ra-
dioodbiornikami montowanymi w pojazdach spod znaku Opla, a więc daje możliwość zastąpienia wbudowanego
(dość archaicznego), trójfunkcyjnego wyświetlacz pokładowego nazywanego skrótem TID (Triple Info Display)
przez niezwykle efektowny, duży i szerokoekranowy kolorowy wyświetlacz TFT o przekątnej 4.2”. Co więcej, ma
możliwość pomiaru spalania i rejestracji przeróżnych statystyk w pojazdach wyposażonych w instalację zasila-
nia gazem LPG i to niezależnie dla obu rodzajów paliwa.
Rekomendacje: prezentowany komputer pokładowy może zostać zamontowany w pojeździe dowolnej marki.
W pojeździe innej marki po prostu nie będzie korzystał z funkcjonalności wyświetlania danych za pomocą wy-
świetlacza radioodbiornika.
Oto lista funkcji, w które jest wyposa- • „Obsługa” dwóch rodzajów paliwa • Łatwość instalacji uzyskana poprzez
żony komputer pokładowy multiTID:: (Pb/LPG), zastosowanie oryginalnego złącza
• Pełna funkcjonalność typo- • Czytelny, intuicyjny, graficzny in- połączeniowego wyświetlacza TID
wego, samochodowego kompu- terfejs użytkownika wzorowany (oraz złącz dodatkowych dla funk-
tera pokładowego. na najnowszych rozwiązaniach cji spalania).
• Możliwość emulacji wyświetlacza TID z segmentu Premium. Ponadto, postawiłem dość wysokie
montowanego w pojazdach marki Opel • Możliwość regulacji jasności pod- wymagania dotyczące funkcjonalności
(8- i 10-znakowego), a więc możliwość świetlenia wyświetlacza graficznego komputera pokładowego, którego zde-
obsługi komunikatów wysyłanych zgodnie z ustawieniem jasności pod- cydowałem się wyposażyć w następu-
przez oryginalne radioodbiorniki. świetlenia zegarów pojazdu. jące funkcje:
• Pokazywanie temperatury na ze- emulacji jest jedną z głównych zalet DODATKOWE MATERIAŁY NA FTP:
wnątrz pojazdu (z zastosowaniem i zarazem unikalnych cech urządzenia ftp://ep.com.pl
czujnika montowanego w pojazdach multiTID, bo umożliwia współpracę ste- user: 66532, pass: 8nnjjeaa
marki Opel) oraz ostrzeżenia o śli- rownika z oryginalnymi radioodbior- W ofercie AVT*
skiej nawierzchni (dla temperatury nikami dedykowanymi do pojazdów AVT-5562
zewnętrznej niższej, niż 5°C). spod znaku Opla. Co więcej, sterow- Podstawowe informacje:
• Pokazywanie chwilowej prędkości nik nasz obsługuje wszystkie rodzaje yyNapięcie zasilania: 8…15 V DC.
yyMaksymalny prąd obciążenia (z napięcia
pojazdu (w km/godz.). radioodbiorników montowanych przez +12 V): 10 mA.
• Pokazywanie średniej prędkości tego producenta, które to wyposażono yyPrąd podtrzymania zegara RTC (z napięcia
BATT): 1 mA.
pojazdu na przejechanym odcinku w magistralę sterującą z sygnałami SDA/ yyMaksymalny prąd podświetlenia (z napię-
drogi (w km/godz.), SCL/MRQ i może emulować wyświe- cia ILL+): 75 mA.
yyDokładność pomiaru temperatury: 1°C.
• Pokazywanie maksymalnej pręd- tlacze TID z 8-znakową i 10-znakową yyZakres pomiarowy temperatury zewnętrz-
kości pojazdu na przejechanym od- organizacją pola tekstowego, a więc nej: –30…35°C.
cinku drogi (w km/godz.), wyświetlacze pokładowe montowane yyZakres pomiarowy prędkości pojazdu:
0…255 km/godz.
• Pokazywanie chwilowego zuży- w takich modelach jak Astra F, Corsa B, yyZakres pomiarowy chwilowego zużycia
cia paliwa (w l/godz. dla prędkości Combo, Astra G, Corsa C, Meriva, Mo- paliwa: 0…99,9 l/100 km.
yyZakres pomiarowy średniego zużycia pali-
≤5 km/godz. oraz l/100 km dla po- vano, Omega B, Vectra B, Tigra. Wyjąt- wa: 0…25,5 l/100 km.
zostałych prędkości) dla obu rodza- kiem są nowsze pojazdy wyposażone yyZakres pomiarowy paliwa dostępnego
jów paliwa. w wyświetlacz pokładowy obsługujący w baku: 0…99,9 l.
yyZakres pomiarowy przejechanej odległości:
• Pokazywanie średniego zużycia pa- magistralę CAN. Ta cecha naszego ste- 0…9999 km.
liwa (w l/100 km) dla obu rodza- rownika czyni go wyjątkowo atrakcyj- yyZakres pomiarowy dystansu do przejecha-
nia na dostępnym paliwie: 0…999 km.
jów paliwa. nym, z punktu widzenia użytkownika yyZakresy regulacji parametrów
• Pokazywanie paliwa pozostającego pojazdu tej marki i co warto podkre- konfiguracyjnych:
Stałe wtryskiwaczy: 1…999 ml/min.
w baku pojazdu(w l, jak i graficznie ślić, nie znajduje odpowiednika ani Stała przetwornika drogi: 1…99
– bargraf) dla obu rodzajów paliwa. w konstrukcjach amatorskich, ani też impulsów/obrót.
• Pokazywanie przewidywanego za- na rynku komercyjnym. Obwód opony: 50…255 cm.
Liczba cylindrów: 2…8.
sięgu pojazdu na paliwie pozostają- Zanim przejdziemy do szczegółów Pojemności baków: 25…99 l.
cym w baku pojazdu (w km) dla obu implementacyjnych warto przyjrzeć yyPrzesunięcie belek informacyjnych:
0÷9 pikseli.
rodzajów paliwa. się rozwiązaniu zastosowanemu przez
Projekty pokrewne na FTP:
• Pokazywanie przejechanego dy- Opla, gdyż jest to przykład dobrze wy- (wymienione artykuły są w całości dostępne na FTP)
stansu od ostatniego kasowania konanej pracy inżynierskiej i dogłęb- AVT-5545 Komputer samochodowy Mee
(w km). nie przemyślanej konstrukcji. Zgodnie MK II (2.0) (EP 7-8-9/2016)
AVT-5495 Uniwersalny komputer
• Pokazywanie aktualnego czasu z tym, o czym wspominano wcześniej, samochodowy Mee
i daty (z zastosowaniem mechani- firma Opel od wielu lat stosuje w swo- (EP 3/2015)
AVT-3095 Komputer samochodowy
zmu podtrzymania zasilania). ich pojazdach zewnętrzne, zintegro-
(EdW 4-5/2014)
• Pokazywanie statystyk spalania wane z deską rozdzielczą, podświetlane AVT-5405 TripCo – komputer
na każde przejechane 10 km/1 km wyświetlacze LCD, których funkcje za- samochodowy (EP 7/2013)
AVT-5395 TIDex – komputer dla
(dla ostatnio przejechanych 150 leżne są od modelu auta, jego wyposaże- samochodów z silnikiem
i 15 km) dla obu rodzajów paliwa. nia, roku produkcji jak i modelu samego Diesla (EP 5/2013)
AVT-5397 Komputer pokładowy
• Automatyczna detekcja bieżącego ro- wyświetlacza. Ogólnie rzecz ujmując z funkcją tempomatu
dzaju paliwa. można wyróżnić kilka typów wyświe- (EP 5/2013)
Jak widać, cel jest dość ambitny, jed- tlaczy, których poglądowe porównanie AVT-1664 Transceiver CAN (EP 2/2012)
AVT-5280 Urządzenie diagnostyczne
nak doświadczenia zdobyte przy kon- przedstawiono w tabeli 1. do sieci CAN (EP 3/2011)
struowaniu poprzednich urządzeń Poza wymienionymi, podstawowymi AVT-5271 VAGlogger – Przyrząd
diagnostyczny dla
upraszczają znacząco proces jego im- różnicami, w zależności od roku pro- samochodów z grupy VW
plementacji. Zanim jednak przejdziemy dukcji i wyposażenia pojazdu, stoso- – Audi (EP 1/2011)
AVT-5160 Climatic – sterownik
do opisu samego urządzenia warto przy- wano wyświetlacze o różnej organizacji klimatyzacji samochodowej
bliżyć nieco temat pokładowego wy- i rozdzielczości. Starsze miały organi- (EP 12/2008)
świetlacza TID, gdyż możliwość jego zację 1×8 znaków (tylko wielkie litery AVT-286 „Komputerek” pokładowy
do samochodu (EP 5-6/1996)
* Uwaga:
Tabela 1. Porównanie funkcjonalności wyświetlaczy pokładowych stosowanych przez
Zestawy AVT mogą występować w następujących wersjach:
AVT xxxx UK to zaprogramowany układ. Tylko i wyłącznie. Bez elementów
firmę Opel
dodatkowych.
AVT xxxx A płytka drukowana PCB (lub płytki drukowane, jeśli w opisie
wyraźnie zaznaczono), bez elementów dodatkowych.
AVT xxxx A+ płytka drukowana i zaprogramowany układ (czyli połączenie
Nazwa Funkcje Typ magistrali sterującej wersji A i wersji UK) bez elementów dodatkowych.
AVT xxxx B płytka drukowana (lub płytki) oraz komplet elementów wymienio-
ny w załączniku pdf
DID Data, godzina, obsługa radioodbiornika AVT xxxx C to nic innego jak zmontowany zestaw B, czyli elementy wlutowane
w PCB. Należy mieć na uwadze, że o ile nie zaznaczono wyraźnie w opisie,
TID Funkcje DID + temperatura zewnętrzna Zmodyfikowana I2C zestaw ten nie ma obudowy ani elementów dodatkowych, które nie zostały
wymienione w załączniku pdf
AVT xxxx CD oprogramowanie (nieczęsto spotykana wersja, lecz jeśli
MID Funkcje TID + obsługa komputera pokładowego występuje, to niezbędne oprogramowanie można ściągnąć, klikając w link
umieszczony w opisie kitu)
Nie każdy zestaw AVT występuje we wszystkich wersjach! Każda wersja ma
NAVI Funkcje MID + obsługa nawigacji satelitarnej CAN załączony ten sam plik pdf! Podczas składania zamówienia upewnij się, którą
wersję zamawiasz! (UK, A, A+, B lub C). http://sklep.avt.pl
Astra G/Corsa
Astra G/Corsa
C C
Astra F/Corsa
Astra F/Corsa B B Tabela 2. Opis wyprowadzeń dwóch złącz wyświetlacza TID stosowanych w najbardziej
popularnych modelach Opla
6 6 1 1
1 1 6 6 Astra G/Corsa C
12 12 7 7 7 7 12 12 Nr pinu Funkcja/Opis
1 Zasilanie: 12V po przekręceniu kluczyka stacyjki
Po czasie T3 (1…2 ms) od ostatniego tego nie zrobi, master powinien zakoń- 8-bitowej z ustawionym bitem R/W).
zwolnienia linii MRQ będącego jed- czyć w tym miejscu bieżącą transmi- Właśnie w tym miejscu jest widoczna
nocześnie końcowym elementem pro- sję danych. Dalej, wyzerowaniu linii subtelna różnica pomiędzy standardo-
cedury Power On Test, układ Master SDA przez slave, master zwalnia linię wym interfejsem zgodnym ze standar-
ponownie zeruje linię MRQ, tym ra- MRQ (zostaje ona ustawiona), co po- dem I2C, a rozwiązaniem zastosowanym
zem jednak z zupełnie innego powodu. winno skutkować zwolnieniem linii przez inżynierów Opla. Skoro transmi-
Po pierwsze, sygnalizuje w ten sposób danych SDA przez slave po czasie T5 towany bajt adresu ma ustawiony naj-
zamiar transmisji danych, a po drugie, (100…200 ms). Na tym etapie rozpo- mniej znaczący bit będący jednocześnie
sprawdza obecność slave na magistrali czyna się właściwa transmisja danych bitem R/W (odczyt/zapis) w standardzie
danych oraz jego gotowość na odbie- zgodna ze specyfikacją standardu I2C, I2C powinno to oznaczać, że master (ra-
ranie pakietu danych, gdyż działanie z jednym, drobnym, acz istotnym wy- dioodbiornik) zgłasza chęć odczytania
takie podejmowane jest każdorazowo jątkiem, o którym mowa będzie w dal- danych ze slave (wyświetlacza TID)
na początku każdej transmisji z radio- szej części artykułu. i kolejne dane, które zostaną przesłane
odbiornika do wyświetlacza TID. Po wy- Wygląd kompletnej ramki danych po- będą danymi przesyłanymi ze slave
muszeniu poziomu niskiego na linii kazano na rysunku 4. Transmisja rozpo- do master, a jest zgoła inaczej, ponieważ
MRQ, slave musi w czasie T4 (100 ms…15 czyna się od wygenerowania sekwencji master kontynuuje w tym miejscu trans-
ms) zewrzeć linię SDA do masy sygnali- Start przez master’a, po czym jako pierw- misję danych do slave, tak jakby najstar-
zując w ten sposób swoją obecność, jak szy bajt transmitowany jest adres szy bit przesłanego wcześniej adresu był
i gotowość do odbierania danych. Jeśli slave o wartości 0x4D (0x9B w notacji wyzerowany. Z czego wynika ta drobna,
acz znacząca różnica? Odpowiedź jest
prosta. Z chęci maksymalnego zabezpie-
czenia się przed możliwością wystąpie-
nia zaburzeń transmisji i będących tego
następstwem, niepoprawnych danych,
o co, jak łatwo się domyślić, nietrudno
w tak niesprzyjającym środowisku, jak
instalacja samochodowa. Otóż, zgodnie
z pomysłem inżynierów Opla, każdy bajt
danych składa się z 7 bitów właściwych
danych oraz bitu kontroli parzystości
Rysunek 2. Przebiegi sygnałów sterujących magistrali danych w trakcie sekwencji Power umieszczonego na pozycji najmniej zna-
On Test
czącej. I niestety, dotyczy to wszystkich
bajtów danych, w tym adresu urządze-
nia, co powoduje, że dla adresu 0x4D
(w notacji 7-bitowej) otrzymujemy bit
kontroli parzystości o wartości „1”,
czyli ustawiony bit R/W. Różnica jest
drobna, lecz niesie za sobą poważne
konsekwencje implementacyjne. Otóż,
w przypadku takiej konstrukcji ramki
danych, do obsługi transmisji danych
nie możemy użyć wygodnego, sprzęto-
wego interfejsu TWI (odpowiednik I2C)
Rysunek 3. Przebiegi sygnałów sterujących magistrali danych po wykonaniu sekwencji
Power On Test REKLAMA
sce w standardzie I2C, kończy sygnał stop (tylko status radia i magnetofonu), zaś
wygenerowany przez master. kolejne 8 bajtów to kody znaków ASCII linii SDA) w dziewiątym takcie zegara
Jak do tej pory nie powiedziałem nic przeznaczonych do wyświetlenia w polu magistrali (SCL) i to niezależnie czy
na temat samych danych, które to ra- tekstowym wyświetlacza (tylko wielkie przesyłane dane dotyczą naszego urzą-
dioodbiornik wysyła do wyświetlacza litery i cyfry, bez znaków specjalnych). dzenia (przesłano wcześniej zgodny
pokładowego TID. Dane te to 13 bajtów, Inny jest też adres samego wyświetla- adres I2C), czy też nie, co również wy-
z których pierwsze trzy bajty odpowia- cza, który przyjmuje wtedy wartość myka się standardom wyznaczonym
dają za wyświetlanie piktogramów po- 0x4A. Już tylko dla porządku dodam, przez specyfikację interfejsu I2C. Sytu-
kazywanych na ekranie wyświetlacza że każdy bajt danych przesłany przez ację taką przedstawiono na rysunku 5,
TID, zaś kolejne 10 bajtów to kody zna- master do slave jest potwierdzany przez który to prezentuje przebiegi na magi-
ków ASCII przeznaczonych do wyświe- układ podrzędny (TID) poprzez wyge- strali danych zarejestrowane podczas
tlenia w polu tekstowym, przy czym nerowanie sygnału ACK (wyzerowanie współpracy radioodbiornika CAR300
//Prototypy funkcji
void initTIDemulator(uint8_t TID_type);
//Definicje portów TID’a
#define I2C_SDA_DDR DDRC
#define I2C_SDA_PIN PINC
#define I2C_SDA_NR PC1 //ISR: PCINT17
#define I2C_SCL_PIN PINB
#define I2C_SCL_NR PB2 //ISR: INT2
#define MRQ_PIN PIND
#define MRQ_NR PD3 //ISR: INT1
#define AA_PIN PIND
#define AA_NR PD2 //ISR: INT0
//Adres wyświetlacza TID
#define TID_TYPE_8DIGITS 0x4A
#define TID_TYPE_10DIGITS 0x4D
#define TID_TIMESTAMP 0x47
//Stany pracy interfejsu TID
#define RADIO_IS_OFF 0x00
#define WAITING_FOR_FIRST_MRQ 0x01
#define FIRST_MRQ_STARTED 0x02
#define WAITING_FOR_SECOND_MRQ 0x03
#define SECOND_MRQ_STARTED 0x04
#define WAITING_FOR_MRQ_BEFORE_TRANSMISSION 0x05
#define START_DETECTED 0x06
//Definicje czasów dla Preskalera Timera1 = 256 i fosc = 12.288MHz [w taktach timera]
#define TIME_TOLERANCE 14 //300us
#define T2_MIN (24 - TIME_TOLERANCE) //500us - TIME_TOLERANCE
#define T2_MAX (48 + TIME_TOLERANCE) //1000us + TIME_TOLERANCE
//Średnie wartości pozostałych czasów [us]
#define T4_MID 120 //120us
#define T5_MID 120 //120us
//Makra dla portów
#define SDA_SET I2C_SDA_DDR &= ~(1<<I2C_SDA_NR) //Ustawiamy, jako wejście podciągnięte przez zewnętrzny rezystor
#define SDA_RESET I2C_SDA_DDR |= (1<<I2C_SDA_NR) //Ustawiamy, jako wyjście z domyślnym stanem „0”
#define SDA_READ ((I2C_SDA_PIN & (1<<I2C_SDA_NR))>>I2C_SDA_NR) //Wartość: 0x00 lub 0x01
#define SDA_IS_RESET (!(I2C_SDA_PIN & (1<<I2C_SDA_NR)))
#define SDA_IS_SET (I2C_SDA_PIN & (1<<I2C_SDA_NR))
#define SCL_IS_RESET (!(I2C_SCL_PIN & (1<<I2C_SCL_NR)))
#define SCL_IS_SET (I2C_SCL_PIN & (1<<I2C_SCL_NR))
#define MRQ_IS_RESET (!(MRQ_PIN & (1<<MRQ_NR)))
#define MRQ_IS_SET (MRQ_PIN & (1<<MRQ_NR))
#define AA_IS_SET (AA_PIN & (1<<AA_NR))
//Makra dla przerwań
#define SDA_INTR_INIT_ON_BOTH_EDGES PCMSK2 = (1<<PCINT17) //Zmiana stanu na PCINT17 (sygnał SDA) generuje przerwanie
#define SDA_INTR_ENABLE PCICR |= (1<<PCIE2) //Zezwolenie na przerwanie PCINT2 (PCINT23..16)
#define SDA_INTR_DISABLE PCICR &= ~(1<<PCIE2) //Zablokowanie przerwania PCINT2 (PCINT23..16)
#define SDA_INTR_CLEAR_FLAG PCIFR |= (1<<PCIF2) //Skasowanie flagi przerwania PCINT2 (PCINT23..16)
#define SDA_INTR_NAME PCINT2_vect //Nazwa wektora przerwania PCINT2 (SDA)
#define SCL_INTR_INIT_ON_RISING_EDGE EICRA |= (1<<ISC21)|(1<<ISC20) //Rosnące zbocze sygnału na INT2 (sygnał SCL) generuje przerwanie
#define SCL_INTR_ENABLE EIMSK |= (1<<INT2) //Zezwolenie na przerwanie INT2
#define SCL_INTR_DISABLE EIMSK &= ~(1<<INT2) //Zablokowanie przerwania INT2
#define SCL_INTR_CLEAR_FLAG EIFR |= (1<<INTF2) //Skasowanie flagi przerwania INT2
#define SCL_INTR_NAME INT2_vect //Nazwa wektora przerwania INT2 (SCL)
#define MRQ_INTR_INIT_ON_BOTH_EDGES EICRA |= (1<<ISC10) //Dowolne zbocze sygnału na INT1 (sygnał MRQ) generuje przerwanie
#define MRQ_INTR_ENABLE EIMSK |= (1<<INT1) //Zezwolenie na przerwanie INT1
#define MRQ_INTR_DISABLE EIMSK &= ~(1<<INT1) //Zablokowanie przerwania INT1
#define MRQ_INTR_CLEAR_FLAG EIFR |= (1<<INTF1) //Skasowanie flagi przerwania INT1
#define MRQ_INTR_NAME INT1_vect //Nazwa wektora przerwania INT1 (MRQ)
#define AA_INTR_INIT_ON_BOTH_EDGES EICRA |= (1<<ISC00) //Dowolne zbocze sygnału na INT0 (sygnał AA) generuje przerwanie
#define AA_INTR_ENABLE EIMSK |= (1<<INT0) //Zezwolenie na przerwanie INT0
#define AA_INTR_DISABLE EIMSK &= ~(1<<INT0) //Zablokowanie przerwania INT0
#define AA_INTR_CLEAR_FLAG EIFR |= (1<<INTF0) //Skasowanie flagi przerwania INT0
#define AA_INTR_NAME INT0_vect //Nazwa wektora przerwania INT0 (AA)
z nowym, 10-znakowym wyświetlaczem iż radioodbiornik wysyła pakiety da- które trudno byłoby ją „obsłużyć” ko-
pokładowym TID. nych dla starego i nowego typu wy- rzystając ze sprzętowego sprzęgu TWI.
Uważny Czytelnik zastanowi się świetlaczy, co oczywiste, stosownie je Na koniec prawdziwa „wisienka na tor-
z pewnością, w jakim celu pokładowy modyfikując. W związku z tym, każdy cie”. Jak wiadomo, oryginalny wyświe-
wyświetlacz TID miałby potwierdzać przesyłany komunikat transmitowany tlacz TID wyposażono w zegar czasu
każdy bajt danych, które nie są do niego jest w dwóch „wersjach”, dla starego rzeczywistego, którego wskazania są wy-
adresowane, to znaczy nie zostały „okra- i nowego typu wyświetlacza, stąd różne świetlane w pierwszej linii ekranu (obok
szone” stosownym adresem układu pod- adresy i różna liczba towarzyszących im
rzędnego (w naszym przypadku 0x4D). danych na jednej i tej samej magistrali. REKLAMA
temperatury zewnętrznej). W związku czasu wyświetlacza TID zarejestrowa- zależności czasowych i zaangażowania
z tym producent modułu wyświetlacza nej 17/08/2016 o godzinie 17:49 przedsta- wielu peryferiów mikrokontrolera, ob-
przewidział możliwość synchroniza- wiono na rysunku 6. Jak poprzednio, bit sługa emulacji wyświetlacza TID (czyli
cji wskazań tego zegara sygnałem czasu najmniej znaczący jest bitem kontroli pa- obsługa radioodbiornika) została zrealizo-
nadawanym przez stacje radiowe, a za- rzystości, w związku z czym cały bajt na- wana z wykorzystaniem 4 zewnętrznych
wartym w treści wybranych komunika- leży przesunąć w prawo o jedno miejsce). przerwań systemowych. Taka mnogość
tów RDS. W jaki sposób wyświetlacz TID To tyle, jeśli chodzi o opis modułu wy- wykorzystywanych przerwań wynika
synchronizuje swój zegar RTC sygnałem świetlacza pokładowego. Przejdźmy za- z faktu obsługi aż 4 sygnałów sterują-
czasu radioodbiornika? Wprowadzono tem do szczegółów implementacyjnych. cych (AA, MRQ, SCL, SDA) przy braku
dodatkowy adres I2C wyświetlacza TID, Jako, że nasze urządzenie multiTID re- możliwości realizacji sprzętowej obsługi
dla którego przesyłane dane są interpreto- alizuje szereg dość skomplikowanych magistrali I2C. W tabeli 5 pokazano zesta-
wane przez ten moduł jako dane bieżącego funkcjonalności, które wymagają ścisłych wienie wykorzystywanych, zewnętrznych
czasu sygnału RDS. Adres ten to 0x47
Listing 2. Funkcja ISR odpowiedzialna za obsługę sygnału AA interfejsu danych wyświetlacza
(0x8F przy ustawionym bicie R/W), nato- TID
//Przerwanie odpowiedzialne za obsługę sygnału AA - wyzwalane po każdym zboczu sygnału
miast odpowiednia ramka danych składa na AA
ISR(AA_INTR_NAME)
się z 7 bajtów o następującej organizacji: {
X-M-G-D-X-X-X, gdzie: M to minuty, G if(AA_IS_SET) //Włączenie radioodbiornika
{
to godziny, D to dzień miesiąca. Bajty X Status = WAITING_FOR_FIRST_MRQ;
MRQ_INTR_INIT_ON_BOTH_EDGES; //Konfiguracja i włączenie przerwania dla MRQ
nie zostały przeze mnie jednoznacznie zi- MRQ_INTR_CLEAR_FLAG;
MRQ_INTR_ENABLE;
dentyfikowane, choć z całą pewnością ich }
else //Wyłączenie radioodbiornika
obecność nie jest przypadkowa. Jeśli bajty {
Status = RADIO_IS_OFF; //Startowy stan algorytmu
te przechowują bieżący miesiąc i rok, jak SDA_SET; //Zwolnienie SDA, gdyby było ściągane przez Slave’a
MRQ_INTR_DISABLE;
się zapewne domyślacie, czas oczekiwa- SDA_INTR_DISABLE;
SCL_INTR_DISABLE;
nia na potwierdzenie tej tezy byłby dość }
}
długi. Wygląd ramki danych znacznika
Listing 3. Funkcja ISR odpowiedzialna za obsługę sygnału MRQ interfejsu danych wyświetlacza TID
//Przerwanie odpowiedzialne za obsługę sygnału MRQ - wyzwalane po każdym zboczu sygnału na MRQ
ISR(MRQ_INTR_NAME)
{
register uint16_t pulseLength;
static uint16_t lastTimer1;
switch(Status)
{
case WAITING_FOR_FIRST_MRQ:
if(SDA_IS_RESET && SCL_IS_RESET && MRQ_IS_RESET) Status = FIRST_MRQ_STARTED; lastTimer1 = TCNT1;
else Status = WAITING_FOR_FIRST_MRQ;
break;
case FIRST_MRQ_STARTED:
pulseLength = TCNT1 - lastTimer1;
if(SDA_IS_SET && SCL_IS_SET && MRQ_IS_SET && pulseLength>T2_MIN && pulseLength<T2_MAX) Status = WAITING_FOR_SECOND_MRQ;
else Status = WAITING_FOR_FIRST_MRQ;
break;
case WAITING_FOR_SECOND_MRQ:
if(SDA_IS_SET && SCL_IS_SET && MRQ_IS_RESET) Status = SECOND_MRQ_STARTED; lastTimer1 = TCNT1;
else Status = WAITING_FOR_FIRST_MRQ;
break;
case SECOND_MRQ_STARTED:
pulseLength = TCNT1 - lastTimer1;
if(SDA_IS_SET && SCL_IS_SET && MRQ_IS_SET && pulseLength>T2_MIN && pulseLength<T2_MAX) Status = WAITING_FOR_MRQ_BEFORE_TRANS-
MISSION;
else Status = WAITING_FOR_FIRST_MRQ;
break;
case WAITING_FOR_MRQ_BEFORE_TRANSMISSION:
if(SDA_IS_SET && SCL_IS_SET && MRQ_IS_RESET)
{
//Sekwencja Slave’a: ściągnięcie SDA do „0” po czasie T4
_delay_us(T4_MID); SDA_RESET;
//Czekamy, aż Master zwolni MRQ (MRQ = 1)
while(MRQ_IS_RESET);
//Sekwencja Slave’a: zwolnienie SDA po czasie T5
_delay_us(T5_MID); SDA_SET;
//Czekamy na sekwencję START
while(SDA_IS_SET);
//Czekamy, aż Master ściągnie SCL do „0”,
//czyli przygotuje się do wysłania bitu
while(SCL_IS_SET);
Status = START_DETECTED;
//Konfiguracja i włączenie przerwania SCL dla
//odbioru danych (poszczególnych bitów)
SCL_INTR_INIT_ON_RISING_EDGE;
SCL_INTR_CLEAR_FLAG;
SCL_INTR_ENABLE;
//Konfiguracja i włączenie przerwania SDA dla
//wykrycia późniejszej sekwencji STOP
SDA_INTR_INIT_ON_RISING_EDGE;
SDA_INTR_CLEAR_FLAG;
SDA_INTR_ENABLE;
//Wyczyszczenie flagi MRQ
MRQ_INTR_CLEAR_FLAG;
}
else Status = WAITING_FOR_FIRST_MRQ;
break;
}
}
Tabela 5. Lista zewnętrznych przerwań systemowych wraz z opisem ich konfiguracji przerwań systemowych, ich konfigurację
i funkcjonalności niezbędnych dla obsługi magistrali radioodbiornika Opla
oraz realizowaną funkcjonalność.
Nazwa
Sposób konfiguracji Funkcjonalność W tym momencie posiadamy już nie-
przerwania
zbędną wiedzę w zakresie sposobu
Wykorzystywane do obsługi sygnału AA
Wyzwalane przy każdym zboczu komunikacji radioodbiornika z orygi-
INT0 w zakresie detekcji włączenia/wyłącze-
sygnału na wejściu AA
nia radioodbiornika nalnym wyświetlaczem pokładowym
Wykorzystywane do obsługi sygnału MRQ TID, w związku z czym pora na szcze-
Wyzwalane przy każdym zboczu
INT1 w zakresie kontroli procesu odbioru góły implementacyjne mechanizmów
sygnału na wejściu MRQ
ramki danych
pozwalających na emulację tego rodzaju
Wyzwalane przy narastającym Wykorzystywane do obsługi sygnału SCL
INT2 wyświetlacza w zakresie interfejsu na-
zboczu sygnału na wejściu SCL w zakresie odczytu bitów danych
szego komputera pokładowego. Zanim
Wyzwalane zmianą stanu Wykorzystywane do obsługi sygnału SDA
PCINT2 jednak przedstawię ciała funkcji ze-
na wejściu SDA w zakresie wykrywania sekwencji Stop
wnętrznych przerwań systemowych
realizujących obsługę poszczególnych
sygnałów magistrali danych muszę
przedstawić plik nagłówkowy, który uła-
twia napisanie wspomnianych funkcji
a zarazem czyni je bardziej czytelnymi.
Treść pliku nagłówkowego, o którym
mowa pokazano na listingu 1. Napi-
sano go w sposób dość „uniwersalny”,
aby łatwo można było zmieniać wiele
Rysunek 6. Wygląd ramki danych znacznika czasu wyświetlacza TID z predefiniowanych nazw i stałych, bez
potrzeby edycji funkcji, które to korzy-
Listing 4. Funkcja ISR odpowiedzialna za obsługę sygnału SDA interfejsu danych wyświetlac-
za TID stają z jego zawartości. Pora na przed-
//Przerwanie odpowiedzialne za obsługę sygnału SDA - wyzwalane po każdej zmianie stanu
na SDA
stawienie funkcji obsługi zewnętrznych
ISR(SDA_INTR_NAME) przerwań systemowych, które łącznie,
{
if(SCL_IS_SET) odpowiedzialne są za obsługę interfejsu
{
if(SDA_IS_SET) //Odebrano sekwencję STOP danych firmy Opel. Te funkcje poka-
{
//Wyłączamy przerwania SDA i oczekujemy na nową sekwencję MRQ zano na listingach od 2 do 5. Do kom-
//(przed pakietem danych) pletu brakuje funkcji inicjalizacyjnej,
Status = WAITING_FOR_MRQ_BEFORE_TRANSMISSION;
SDA_INTR_DISABLE; która ustawia parametry emulowanego
//Zerujemy zmienną, bo sygnał STOP mógłby wystąpić przed końcem ramki
byteIndex = 0; wyświetlacza TID oraz aktywuje nie-
}
} zbędne, startowe funkcje ISR – poka-
}
zano ją na listingu 6.
Przejdźmy zatem do krótkiej analizy
Listing 5. Funkcja ISR odpowiedzialna za obsługę sygnału SCL interfejsu danych wyświetlac-
za TID przedstawionych mechanizmów progra-
//Przerwanie odpowiedzialne za obsługę sygnału SCL - wyzwalane przy rosnącym zboczu sygnału
na SCL mowych. Można zauważyć, że funkcja
ISR(SCL_INTR_NAME)
{
obsługująca sygnał MRQ sprawdza zależ-
register uint8_t Bytes = (TIDtype == TID_TYPE_8DIGITS)? 11:14; ności czasowe podczas sekwencji Power
static uint8_t bitIndex, readValue, TID[14];
readValue = (readValue<<1)|SDA_READ; On Test i dopiero po ich pozytywnej we-
if(++bitIndex == 8) //Odczytano 8 bitów bieżącego bajta danych
{ ryfikacji pozwala na dalszą analizę sy-
TIDisr[byteIndex++] = readValue; //Element nr 0 zawiera adres I2C TID’a
bitIndex = readValue = 0; gnałów sterujących wykonywaną przez
//Generujemy ACK po każdych, odebranych 8 bitach danych
while(SCL_IS_SET); //Czekamy, aż Master ustawi SCL = 0 funkcje ISR, odpowiednio dla SDA i SCL.
SDA_RESET; //sygnał ACK generowany przez Slave’a
while(SCL_IS_RESET); //Czekamy, aż Master ustawi SCL, tj. odbierze ACK Oczywiście, sam start procesu obsługi
while(SCL_IS_SET); //Czekamy, aż Master wyzeruje SCL, czyli przejdzie do następ-
nego bitu magistrali wyświetlacza TID jest moż-
SDA_SET; //Zwolnienie SDA przez Slave’a
SCL_INTR_CLEAR_FLAG; liwy wyłącznie po załączeniu radiood-
SDA_INTR_CLEAR_FLAG;
//Sprawdzamy, czy mamy komplet bajtów by oczekiwać na sekwencję
biornika, czemu towarzyszy wywołanie
//STOP (niezależnie od rodzaju TID’a) przerwania dla sygnału AA.
if((TID[0]>>1 == TID_TYPE_8DIGITS && byteIndex == 11)
||(TID[0]>>1 == TID_TYPE_10DIGITS && byteIndex == 14) Robert Wołgajew, EP
||(TID[0]>>1 == TID_TIMESTAMP && byteIndex == 8))
{
if((TID[0]>>1) == TIDtype) //Sprawdzamy, czy to obsługiwany TID Listing 6. Funkcja inicjalizacji modułu
{ emulatora wyświetlacza TID
for(uint8_t i=0; i<Bytes; ++i) TIDdata[i] = TID[i];
inline void initTIDemulator(uint8_t TID_
TIDdataReady = 1;
} type)
byteIndex = 0; {
//Wyłączamy przerwanie SCL i oczekujemy na sekwencję STOP AA_INTR_INIT_ON_BOTH_EDGES;
SCL_INTR_DISABLE; AA_INTR_CLEAR_FLAG;
} AA_INTR_ENABLE;
} TIDtype = TID_type;
} }
multiTID
– wielofunkcyjny, samochodowy komputer
pokładowy (2)
Po lekturze pierwszej części artykułu wiemy już wszystko w zakresie obsługi jest wywoływane zmianą poziomu na wypro-
wyświetlacza pokładowego oraz emulowania jego funkcjonalności, więc wadzeniu PB6 na skutek załączenia zaworu
pora na zaprezentowanie szczegółów budowy komputera samochodowe- na reduktorze instalacji LPG (czyli zmiany pa-
go multiTID. liwa zasilającego silnik na LPG, w tym „start”
wtryskiwaczy gazu). To rozwiązanie pozwala
Schemat ideowy komputera samochodo- czasowo-licznikowego Timer2. Skonfiguro- na efektywną realizację funkcji automatycz-
wego multiTID pokazano na rysunku 7. wano go do pracy w trybie CTC, w którym nej detekcji rodzaju paliwa i reakcję po stro-
Został on zbudowany z zastosowaniem generuje cykliczne przerwania (co 10 ms) nie programu obsługi.
mikrokontrolera Atmega644-PA, zegara wywołując obsługę klawiatury (przyciski Na listingu 8 pokazano wzory zaczerp-
czasu rzeczywistego z podtrzymaniem MENU/<, OK/>). Dzięki zastosowaniu tego nięte bezpośrednio z programu obsługi
zasilania MCP7940N-I/SN oraz wyświe- typu rozwiązania, program obsługi aplikacji aplikacji służące do obliczenia wszyst-
tlacza TFT pełniącego rolę graficznego in- urządzenia nie używa opóźnień, co zapew- kich parametrów rzeczywistych kompu-
terfejsu użytkownika. nia jego bezproblemową pracę oraz możli- tera pokładowego.
Mikrokontroler, jak to zwykle bywa, wość detekcji czasu naciśnięcia przycisku Kilka słów komentarza wymaga mecha-
stanowi „serce”. Jest taktowany za pomocą (krótki/długi/przytrzymanie itd.), dzięki nizm akumulowania przejechanej drogi i zu-
rezonatora kwarcowego 12,288 MHz dla za- czemu udało się poprawić ergonomię. żytego paliwa. Komputer multiTID oblicza
pewnienia dużej dokładności pomiaru czasu Jak opisano w tab. 6, multiTID dokonuje i wyświetla średnie wartości zużycia pa-
oraz prędkości ładowania obrazków stano- w czasie każdej sekundy pomiaru sumarycz- liwa i prędkości, objętość paliwa pozostają-
wiących elementy graficznego interfejsu nej liczby impulsów doprowadzanych na wej- cego w baku pojazdu oraz pokonany dystans.
użytkownika. Oczywiście, lepiej byłoby za- ście T0 mikrokontrolera z przetwornika drogi Jak łatwo się domyślić, w celu wyznacze-
stosować maksymalną, dostępną częstotli- pojazdu oraz pomiaru sumarycznego czasu nia wspomnianych wartości jest niezbędna
wość taktowania mikrokontrolera tj. 20 MHz, wtrysków, których to sygnał jest doprowa- znajomość całkowitego zużycia paliwa i dy-
jednak przy napięciu zasilania 3,3 V jest dzony na wejście ICP1 licznika Timer1. W celu stansu od momentu wyzerowania liczników,
to wartość progowa, dla której deklarowana realizacji drugiej z funkcjonalności zaprojek- a co za tym idzie – niezbędny staje się me-
jest poprawna praca mikrokontrolera. towano dwa kompletne, bezpieczne układy chanizm akumulowania mierzonych warto-
W celu realizacji założonej funkcjonal- wejściowe formujące sygnały wtryskiwaczy ści, niezależnie dla każdego rodzaju paliwa.
ności urządzenia, w programie obsługi ni- paliwa (oddzielnie dla Pb i LPG) dla potrzeb
niejszego sterownika, wykorzystano dwa wejściowych obwodów mikrokontrolera. Wy- Ustawienia Fuse-bitów:
sprzętowe układy czasowo-licznikowe bór wtryskiwacza paliwa, z którego impulsy CKSEL3...0: 1111
znajdujące się „na pokładzie” mikrokon- podawane są na wejście ICP mikrokontrolera, SUT1...0: 11
trolera oraz jedno przerwanie zewnętrzne. jest realizowany poprzez scalony przełącznik CKDIV8: 1
Sposób konfiguracji wspomnianych pery- NC7SB3157 (U5), dla którego sygnałem steru- CKOUT: 1
feriów oraz realizowaną przez nie funkcjo- jącym jest poziom logiczny na wyjściu PD7 JTAGEN: 1
nalność pokazano w tabeli 6. W aplikacji mikrokontrolera. Jest on zmieniany w pro- EESAVE: 1
BODLEVEL2:0: 110
użyto także ostatniego dostępnego układu cedurze obsługi przerwania PCINT1, które
Wykaz elementów: Mikrokontroler Atmega644-PA ma nie- źródło napięcia odniesienia VBG (bandgap),
Rezystory: (SMD 0805) ulotną pamięć EEPROM, jednak zapewnia a napięcie z dzielnika NTC/R2 jest napięciem
R1, R3: 10 kV ona ograniczoną liczbę gwarantowanych cy- referencyjnym przetwornika A/C. W ten spo-
R2: 6,34 kV/1% klów zapisu. Dlatego posłużono się pamię- sób odwrócimy „normalny” sposób pomiaru
R4, R5, R7, R9, R11, R12, R14…R16, R18: 3 kV cią RAM dostępną w układzie zegara czasu napięcia przez przetwornik A/C. Nie mając
R6, R10, R13, R19: 1 kV
rzeczywistego MCP7940N, której zawartość de facto do dyspozycji żadnego z wejścio-
R8, R17: 8,2 kV
jest podtrzymywana nawet po wyłączeniu wych portów mikrokontrolera, do których
R20, R21: 10 V
zapłonu za pomocą baterii BAT. Dla wygody dołączono wejścia przetwornika A/C, mo-
Kondensatory: (SMD 0805)
wszystkie dane obliczeniowe uformowano żemy dokonywać pomiaru napięcia korzy-
C1, C2, C8, C9: 22 pF
w strukturę zaopatrzoną w sumę kontrolną stając głównie z faktu, iż przetwornik może
C4: 470 nF
C3, C5, C10, C13, C14: 100 nF CRC8. mierzyć napięcie VBG.
C6, C7, C11: 10 mF/16 V (SMD „A”) Kolejne słowo komentarza należy się ukła- Napięcie wyjściowe dzielnika NTC/
C12: 1 mF dowi odpowiedzialnemu za pomiar tempe- R2 będące zarazem napięciem referencyj-
Półprzewodniki: ratury zewnętrznej. Samochody marki Opel nym (odniesienia) przetwornika A/C wy-
U1, U3 – MCP1703-3302E/DB (obudowa mają rezystancyjny czujnik temperatury ze- raża się wzorem U_WY=U_REF=R_NTC/
SOT223) wnętrznej montowany w okolicach przed- (R_NTC+R_2)×3,3 V. Z kolei, wartość zmie-
U2 – MCP7940N-I/SN (obudowa SO08) niego zderzaka. Jest to termistor o ujemnym rzona przez przetwornik A/C wyraża się
U4 – ATMEGA644PA (obudowa TQFP44) współczynniku temperaturowym (NTC), wzorem ADC=(U_IN×1024)/U_REF, gdzie
U5 – NC7SB3157 (obudowa SC-70-6) którego zaciski dostępne są w złączu wy- U_IN=VBG=1,1 V. Za pomocą obu wzorów
U6, U7 – LTV817S-SMD (obudowa SO04) świetlacza TID. Skoro tak, to sposób pomiaru otrzymujemy wyrażenie pozwalające wy-
T1, T2 – BC817 (obudowa SOT23) temperatury nasuwa się sam. Dysponując znaczyć wartość mierzoną przez przetwor-
D1, D2 – 1N4148 (obudowa MINIMELF) przetwornikiem A/C wystarczy zastosować nik A/C – ADC=(1,1×1024×(R_NTC+R_2))/
Inne:
dzielnik rezystancyjny, którego jednym z ele- (3,3×R_NTC). Tego sposobu możemy użyć
TFT – wyświetlacz graficzny Multi-Inno
mentów jest termistor w pojeździe, a drugim prawie zawsze, gdy brakuje wejść, aby sko-
Technology MI0420CT-5 (kontroler FT1509,
dokładny rezystor o odpowiedniej rezystan- rzystać z wbudowanego przetwornika A/C.
taśma ZIF 45 pin)
cji. Dzielnik rezystancyjny, o którym mowa By obliczyć wartość temperatury zewnętrz-
L1 – dławik 10µH (obudowa SMD 0805)
zbudowano z termistora dostępnego na za- nej, program obsługi aplikacji korzysta z pre-
Q1 – rezonator kwarcowy 12,288 MHz niski
Q2 – rezonator kwarcowy, zegarkowy ciskach NTC/NTC wyświetlacza TID oraz definiowanej i zapisanej w pamięci Flash
32768 Hz rezystora R2. tablicy stałych odwzorowujących charakte-
MENU/<, OK/> – microswitch THT wyso- Wszystkie wejścia PORTA mikrokontro- rystykę zastosowanego termistora NTC. Już
kość 6 mm lera, do których w wewnętrznej strukturze zupełnie na koniec dodam, iż zdecydowaną
LPG – gniazdo IDC męskie typu P1303 układu są dołączone wejścia przetwornika większość pamięci programu aplikacji zajęły
(PIN3, raster 2,54mm) A/C użyto do sterowania pracą wyświe- wzorce obrazków wyświetlanych w ramach
PB – gniazdo IDC męskie typu P1302 tlacza TFT. Jak w takiej sytuacji zmierzyć graficznego interfejsu użytkownika (niektóre
(PIN2, raster 2,54mm) napięcie występujące na termistorze? Za- z nich, mimo kompresji, zajmują po 5 kB) oraz
TID_CON – gniazdo wyświetlacza Opel TID stosowano tu pewną „sztuczkę”. Napięciem wzorce czcionek.
lub gniazdo IDC do druku (PIN 2×6, raster wejściowym (mierzonym) przetwornika A/C Robert Wołgajew, EP
2,54mm) jest specjalne, wysokostabilne, wewnętrzne
/*
– InjectionTime – sumaryczny czas wtrysku zliczony w czasie 1s [ms*48]
– WEGpulses – liczba impulsów z przetwornika drogi zliczona w czasie 1 sekundy
– Fuel – bieżący rodzaj paliwa – zmienna ustawiana w procedurze przerwania PCINT1
– spentFuelPer1s – bieżące paliwo spalone w czasie ostatniej sekundy [ul]
– Accu.Measurements – akumulator liczby interwałów pomiarowych [s] – oddzielnie dla każdego paliwa
– Accu.spentFuel – akumulator ilości spalonego paliwa [ul] – oddzielnie dla każdego paliwa
– Accu.remainingFuel – akumulator ilości paliwa pozostającego w baku [ul] – oddzielnie dla każdego paliwa
– Accu.Distance – akumulator przejechanego dystansu [m] – oddzielnie dla każdego paliwa
– Consum – chwilowe zużycie paliwa [l*10/h], dla prędkości≤5 km/h lub [l*10/100km], dla prędkości>5 km/h
– ConsumAvg – średnie zużycie paliwa [l*10/100km]
– Speed – prędkość chwilowa [km/h]
– SpeedAvg – prędkośc średnia [km/h]
– availableDistance – orientacyjny, dostępny dystans na paliwie pozostającym w baku [km] – oddzielnie dla każdego paliwa
– Config.CcPerMin – stała wtryskiwacza [ml/min] – oddzielnie dla każdego paliwa
– Config.PulsPerRot – stała przetwornika drogi [imp/obr]
– Config.Cylinders – liczba wtryskiwaczy paliwa
– Config.Wheel – obwód opony [cm]
*/
+3.3V
R12
3k
TID_CON
7 1 KEYON
NTC+ KEYON
8 2
R13 DIAG AA
T1 9 3
WEG BATT BATT R19
BC817 10 4
1k SCL LIT
11 5
SDA NTC– 1k
12 6
MRQ GND
GND +3.3V
GND
R17
8k2
GND
VCC
U4
+3.3V 5 30
VCC (PCINT7/ADC7)PA7
17 31
VCC (PCINT6/ADC6)PA6
38 32
VCC (PCINT5/ADC5)PA5
33
R1 RES (PCINT4/ADC4)PA4
34
10k (PCINT3/ADC3)PA3
4 35
RESET (PCINT2/ADC2)PA2
C1 22pF Q1 36
(PCINT1/ADC1)PA1
7 37 SCK MISO MOSI
XTAL2 (PCINT0/ADC0)PA0
C2 22pF 8
XTAL1
3
GND 12.288MHz (PCINT15/SCK)PB7
29 2
L1 AREF (PCINT14/MISO)PB6
27 1
AVCC (PCINT13/MOSI)PB5
10uH 44
R2 (PCINT12/OC0B/SS)PB4
43
(PCINT11/OC0A/AIN1)PB3
6k34 42
(PCINT10/INT2/AIN0)PB2
41
(PCINT9/CLKO/T1)PB1
40 MENU/< OK/>
(PCINT8/XCK0/T0)PB0
C3 C4 C5 26 3 1 1 3
100nF 470nF 100nF (PCINT23/TOSC2)PC7
25 4 2 2 4
GND (PCINT22/TOSC1)PC6
24
(PCINT21/TDI)PC5
23
(PCINT20/TDO)PC4
22
(PCINT19/TMS)PC3
21
(PCINT18/TCK)PC2
20
(PCINT17/SDA)PC1
19 GND GND
(PCINT16/SCL)PC0
16
(PCINT31/OC2A)PD7
15
(PCINT30/OC2B/ICP)PD6
14
(PCINT29/OC1A)PD5
13
(PCINT28/OC1B)PD4
39 12
GND (PCINT27/INT1)PD3
28 11
GND (PCINT26/INT0)PD2
18 10
GND (PCINT25/TXD0)PD1
6 9
GND (PCINT24/RXD0)PD0
ATMEGA644PA
GND
U1 U3
MCP1703–3302EDB 2x22pF U2 MCP1703–3302EDB
1 3 C8 Q2 1 8 3 1
KEYON VI VO +3.3V X1 VCC VO VI BATT
GND TAB C9 R3 TAB GND
2 7
X2 MFP
32768Hz 10k
R4
2
6
SCL
+ C6 + C7 3k +
R5
4 5
GND SDA
10uF 10uF 3k C11 C12
10uF 1uF
MCP7940N–I/SN
C10
100nF
GND GND GND GND GND GND GND GND GND GND
41
1
2
4
6
7
TFT yyMaksymalny prąd podświetlenia (z napię-
MI042CT–5 cia ILL+): 75 mA.
IOVCC
LEDA1
LEDK1
LEDA2
LEDK2
GND2
GND1
VCI
VCC
yyDokładność pomiaru temperatury: 1°C.
yyZakres pomiarowy temperatury zewnętrz-
nej: –30…35°C.
40 31 yyZakres pomiarowy prędkości pojazdu:
+3.3V IM0 VSYNC
39
IM1 HSYNC
32 0…255 km/godz.
38
IM2 DCLK
33 yyZakres pomiarowy chwilowego zużycia
34 paliwa: 0…99,9 l/100 km.
ENA
5
FMARK yyZakres pomiarowy średniego zużycia pali-
wa: 0…25,5 l/100 km.
yyZakres pomiarowy paliwa dostępnego
w baku: 0…99,9 l.
yyZakres pomiarowy przejechanej odległości:
DB17
DB16
DB15
DB14
DB13
DB12
DB10
DB11
SDO
DB9
DB8
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
RES
WR
SDI
RD
CS
RS
0…9999 km.
yyZakres pomiarowy dystansu do przejecha-
8
9
35
36
27
28
29
30
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
nia na dostępnym paliwie: 0…999 km.
yyZakresy regulacji parametrów
konfiguracyjnych:
Stałe wtryskiwaczy: 1…999 ml/min.
Stała przetwornika drogi: 1…99
GND
impulsów/obrót.
Obwód opony: 50…255 cm.
Pb LPG Liczba cylindrów: 2…8.
Pojemności baków: 25…99 l.
LPG–3
LPG–2
LPG–1
PB–1
0÷9 pikseli.
Projekty pokrewne na FTP:
1N4148
1N4148
D2
samochodowy Mee
R6 R8 R10 (EP 3/2015)
1k 8k2 1k
AVT-3095 Komputer samochodowy
(EdW 4-5/2014)
AVT-5405 TripCo – komputer
+3.3V samochodowy (EP 7/2013)
AVT-5395 TIDex – komputer dla
2
R9
C13 3k
samochodów z silnikiem
GND Diesla (EP 5/2013)
100nF * Uwaga:
GND U6 U7 Zestawy AVT mogą występować w następujących wersjach:
5
6 LTV817S–SMD LTV817S–SMD AVT xxxx UK to zaprogramowany układ. Tylko i wyłącznie. Bez elementów
3
dodatkowych.
1 AVT xxxx A płytka drukowana PCB (lub płytki drukowane, jeśli w opisie
wyraźnie zaznaczono), bez elementów dodatkowych.
4 AVT xxxx A+ płytka drukowana i zaprogramowany układ (czyli połączenie
3 wersji A i wersji UK) bez elementów dodatkowych.
AVT xxxx B płytka drukowana (lub płytki) oraz komplet elementów wymienio-
ny w załączniku pdf
AVT xxxx C to nic innego jak zmontowany zestaw B, czyli elementy wlutowane
w PCB. Należy mieć na uwadze, że o ile nie zaznaczono wyraźnie w opisie,
zestaw ten nie ma obudowy ani elementów dodatkowych, które nie zostały
2
Fotografia 9 Wygląd obwodu drukowanego zmontowanego sterownika multiTID od strony elementów (bez wyświetlacza TFT)
REKLAMA
multiTID
– wielofunkcyjny, samochodowy komputer
pokładowy (3)
Omówiliśmy już sposób działania oraz budowę komputera multiTID. Teraz Połączenia
przyszedł czas na zamontowanie go w samochodzie, skonfigurowanie, Konstruując multiTID, kierowałem się za-
a wreszcie użytkowanie! łożeniem, że jego włączenie w miejsce ory-
ginalnego wyświetlacza pokładowego TID
powinno sprowadzać się do zwykłego wpięcia
Schemat montażowy komputera samocho- Ostatnimi podzespołami, które należy wlu- przewodów. Idąc tym tokiem myślenia, urzą-
dowego multiTID pokazano na rysunku 8, tować po stronie wyprowadzeń (BOTTOM), dzenie multiTID wyposażyłem w 12-pinowe
opublikowanym w poprzedniej części arty- są gniazda podłączeniowe: TID_CON (najlepiej złącze o rozmieszczeniu wyprowadzeń zgod-
kułu w EP 1/2017. Zaprojektowano zwarty, oryginalne, wylutowane z wyświetlacza TID), nym z oryginałem, co umożliwia wlutowa-
dwustronny obwód drukowany, złożony Pb, LPG. Na samym końcu przyłączamy taśmę nie w to miejsce elementu wymontowanego
w głównej mierze z elementów przeznaczo- wyświetlacza TFT do złącza ZIF, dbając o od- z oryginalnego, 10-znakowego wyświetlacza
nych do montażu powierzchniowego. Co bar- powiednie zablokowanie zatrzasków złącza, na- pokładowego (z Astry G, Corsy C itp.). Oczy-
dzo ważne w wypadku pracy w środowisku tomiast sam panel TFT przyklejamy do płytki wiście, w tym miejscu możemy również za-
o potencjalnie dużym poziomie zaburzeń, sterownika, korzystając z 4 dystansów o wyso- stosować listwę goldpin 2×6 pinów.
jakim bez wątpienia jest instalacja samocho- kości równej wysokości najwyższego elementu Rozmieszczenie wyprowadzeń, o którym
dowa, zadbano o odpowiednie prowadzenie montowanego po stronie TOP oraz dwustronnej wspomniałem wcześniej, dotyczy wersji wy-
masy i sygnałów krytycznych. taśmy klejącej. Na fotografii 9 pokazano wy- świetlacza TID o organizacji 10-znakowej,
Z uwagi na fakt, że moduł wyświetla- gląd zmontowanego komputera multiTID bez więc jeśli urządzenie multiTID ma być za-
cza TFT jest dołączony do płytki z użyciem wyświetlacza TFT. instalowane w pojeździe wyposażonym
gniazda ZIF o gęstym rastrze (45 wyprowa-
dzeń co 0,5 mm), montaż rozpoczynamy
od przylutowania tego gniazda. Należy przy
tym posłużyć się cyną z odpowiednią ilością
topnika oraz cienką plecionką, która umoż-
liwi usunięcie nadmiaru cyny. Jakość tak
wykonanego połączenia sprawdzamy pod
lupą oraz kontrolujemy zwarcia multime-
trem. Wspomniana kontrola będzie znacznie
łatwiejsza, jeśli zmontowana płytkę sterow-
nika przemyjemy alkoholem izopropylowym
w celu wypłukania nadmiaru kalafonii.
Następnie lutujemy mikrokontroler, pozostałe
elementy półprzewodnikowe SMD, elementy
bierne, a na samym końcu wszystkie elementy Fotografia 9. Wygląd obwodu drukowanego zmontowanego sterownika multiTID od stro-
przeznaczone do montażu przewlekanego. ny elementów (bez wyświetlacza TFT)
Rysunek 11. Diagram obrazujący system Menu i sposób obsługi sterownika multiTID
dystansu, średnich wartości obliczenio- paliwa i zwiększyć jego ilość o zatankowaną belce informacyjnej, które wyświetlane
wych lub wyzerowania statystyk spalania. wartość (zmiana o pełne litry). Mechanizm są zawsze, niezależnie od aktywnego ekranu
Zastosowanie tylko dwóch przycisków po- pomiarowy sterownika multiTID będzie na- menu). Znaczenie poszczególnych danych
zwala również na dołączenie do urządzenia stępnie odejmował od wartości dostępnego jest następujące:
multiTID oryginalnej „manetki” komputera paliwa zużywane paliwo, co umożliwia re- 1. Bieżąca godzina.
pokładowego, która poprawia ergonomię alizację wspomnianej funkcjonalności. 2. Bieżąca data.
użytkowania urządzenia. Nie są to jednak Słowo komentarza należy się także sa- 3. Chwilowe zużycie paliwa (w l/godz.
wszystkie funkcje wspomnianych elemen- memu interfejsowi graficznemu. Konstruując dla prędkości poniżej 5 km/godz., dla
tów, gdyż ich funkcjonalność zależna jest sterownik multiTID, chciałem, aby formą pozostałych prędkości w l/100 km)
od aktualnego trybu pracy układu multiTID. prezentacji danych oraz możliwościami do- wraz z oznaczeniem aktualnie używa-
Na rysunku 11 pokazano diagram obrazu- równywał rozwiązaniom znanym ze współ- nego paliwa.
jący system menu oraz sposób obsługi urzą- czesnej motoryzacji, zwłaszcza w tzw. 4. Dostępna ilość aktualnie używanego
dzenia. Na tym rysunku symbole przycisków segmencie Premium. Podstawowym zada- paliwa (w tym, graficzna prezentacja
wypełnione kolorem czarnym oznaczają dłu- niem było w takim razie zaprojektowanie w formie bargrafu, który zmienia kolor
gie naciśnięcie wybranego przycisku. Warto czytelnego i ładnego interfejsu użytkownika na czerwony w przypadku, jeśli w zbior-
zauważyć, że funkcja wyświetlania ilości z wykorzystaniem efektownych, kolorowych niku jest poniżej 10% paliwa).
dostępnego paliwa w zbiorniku nie korzy- elementów graficznych. Nie było to zadanie 5. Prognozowany dystans na dostęp-
sta z sygnału informującego o rzeczywistym łatwe i opracowanie interfejsu graficznego nym, bieżącym rodzaju paliwa (liczony
poziomie paliwa, gdyż jej implementacja, zajęło mi najwięcej czasu, włączając w to wy- w oparciu o średnie zużycie paliwa).
skalowanie i samo włączenie sterownika konanie wielu drobnych ikon. Zdecydowa- 6. Temperatura na zewnątrz pojazdu.
do instalacji pojazdu byłoby dość kłopotliwe. łem się na kolorystykę zbliżoną do sepii, gdyż 7. Ikonka „śnieżynki” informująca o śli-
Mechanizm jej działania jest w tym wypadku taka wydała mi się najbardziej stonowana skiej nawierzchni (dla temperatury po-
bardzo prosty i zakłada każdorazowe uzu- i elegancka, a przy okazji pasująca do kolo- niżej 4°C).
pełnianie bieżącego odczytu o ilość zatan- rów podświetlenia stosowanych przez Opla. 8. Ikonka informująca o aktywnym trybie
kowanego paliwa, co jest możliwe poprzez Na rysunku 12 pokazano wygląd „Menu kalibracji stałej wtryskiwacza.
wejście w tryb edycji paliwa dostępnego zużycia paliwa” wraz z opisem wszyst- 9. Informacje tekstowe przesyłane przez
w zbiorniku. A więc po każdym tankowaniu kich wyświetlanych danych (w tym da- radioodbiornik Opla plus ikonki repre-
pojazdu należy wejść w edycję dostępnego nych znajdujących się na górnej i dolnej zentujące status radia/magnetofonu/CD.
10. Średnie zużycie paliwa w l/100 km. w kierunku środka ekranu o zadaną liczbę całego interfejsu użytkownika z kolorów se-
Na rysunku 13 pokazano wygląd „Menu pikseli obrazu (0...9). Funkcja ta może być pii na niebieski i odwrotnie. Wygląd przykła-
prędkości” z opisem wyświetlanych da- użyteczna w przypadku, gdy pionowy wy- dowego Menu zużycia paliwa w kolorystyce
nych. Znaczenie poszczególnych danych miar okna przeznaczonego na montaż ory- niebieskiej pokazano na fotografii 16.
jest następujące: ginalnego wyświetlacza TID jest mniejszy Wybrana opcja Menu jest podświetlana
1. Chwilowa prędkość pojazdu w km/godz. niż wysokość ekranu, co powodowałoby w kolorze białym, a wejściu w jej edycję
2. Maksymalna, zarejestrowana prędkość przesłanianie „belek” informacyjnych i za- towarzyszy negacja tła wybranej wartości
pojazdu w km/godz. wartych tam informacji. Z kolei opcja „In- (tło staje się białe, zaś wybrane wartości
3. Przejechany dystans w km (od ostatniego terface type” pozwala na zmianę kolorystyki czarne). Wyjściu z trybu konfiguracyjnego
kasowania tego licznika) dla aktualnie uży-
wanego paliwa.
4. Średnia prędkość pojazdu w km/godz.
Na rysunku 14 pokazano wygląd „Menu sta-
tystyk” wraz z opisem wszystkich wyświetla-
nych danych.
Znaczenie poszczególnych danych
jest następujące:
1. Słupki reprezentujące średnie zużycie
paliwa, dla bieżącego rodzaju paliwa,
na każde przejechane 10 km lub 1 km (w za-
leżności od wybranej opcji). Możliwość
wyświetlenia kolejnego „słupka” zależy,
co oczywiste, od aktualnie przejechanego
dystansu oraz wybranej skali wykresu.
Wykres pokazuje zawsze statystyki dla
ostatnio przejechanych 150 km lub 15 km
i jest aktualizowany co jednostkę skali dy-
stansu (przesuwa się w lewo po przejecha-
niu 150 km lub 15 km). Rysunek 12. Wygląd „Menu zużycia paliwa”
2. Linia reprezentująca średnie zuży-
cie paliwa dla bieżącego rodzaju paliwa
w l/100 km (wraz z wartością).
3. Skala dla wykresu średniego zużycia pa-
liwa dla bieżącego rodzaju paliwa (zmie-
niana z poziomu menu).
4. Średnia prędkość pojazdu w km/godz.
(od ostatniego kasowania tego licznika).
5. Przejechany dystans w km dla bieżącego
rodzaju paliwa (od ostatniego kasowania
tego licznika).
6. Czas jazdy (od ostatniego kasowania
tego licznika).
Na rysunku 15 pokazano wygląd „Menu
konfiguracyjnego”. Znaczenie poszczególnych
opcji Menu konfiguracyjnego jest następujące:
• Tire perimeter: obwód koła w [cm]. Rysunek 13. Wygląd „Menu prędkości”
• Pulses/rotation: stała przetwornika drogi.
• Pb injector flow: stała wtryskiwacza ben-
zyny [cm3].
• LPG injector flow: stała wtryskiwacza gazu
LPG [cm3].
• Cylinders: liczba cylindrów.
• Pb tank capacity: pojemność zbiornika pa-
liwa [l].
• LPG tank capacity: pojemność zbiornika
gazu LPG [l].
• Time: aktualny czas (format 24-godzinny).
• Date: aktualna data.
• Info bar offset: przesunięcie górnej i dolnej
„belki informacyjnej” w kierunku środka
ekranu [piksel].
• Interface type: kolorystyka interfejsu użyt-
kownika [Sepia/Blue].
Opcja „Info bar offset” służy do przesu-
nięcia górnej i dolnej „belki informacyjnej” Rysunek 14. Wygląd „Menu statystyk”