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.

Mini komputerek samochodowy na AVR

pasikx 27 Sie 2004 16:19 28184 64
  • #1 27 Sie 2004 16:19
    pasikx
    Poziom 12  

    Wlasnie ukonczylem program na mikrokontroler AVR ATmega32 realizujacy funkcje prostego komputerka samochodowego.

    Komputerek jak narazie ma nastepujace funkcje:
    - pokazuje wartosc napiecia akumulatora (ADC wbudowany w ATmega32)
    - pokazuje aktualny czas (PCF8583)
    - mierzy temperature z trzech niezaleznych czujnikow np. w samochodzie, na zewnatrz, oraz temp. silnika (DS18B20)
    - posiada pamiec 2 stanow licznika kilometrow (wartosci wpisywane recznie - za pomoca przyciskow)

    Calosc sterowana jest za pomoca 3 przyciskow microswitch, a wyniki wyswietlane sa na LCD 2x16 (HDD44780).

    Ponizej zamieszczam zrodło programu napisanego dla avr-gcc.
    Program jest mojego autorstwa jednakze niektore fragmenty kodu zostaly przepisane z innych zrodel !
    Schematu urzadzenia jeszcze nie ukonczylem(mam w glowie), wiec jesli beda chetni to sie zmusze i rownierz go tu zamieszcze. Jednak uklad zlozony dziala juz bez problemu w moim aucie !

    Czekam na wasze propozycje zwiazane z rozbudowa ukladu !

    UWAGA: Program ma błąd i podaje złe wartości niektórych napięć np. zamiast 12.08 pokazuje 12.8 !
    Błąd został już usunięty w następnej wersji programu która jest już prawie ukończona, i prawdopodobnie równierz będzie wrzucona na forum :idea:

    0 29
  • #2 27 Sie 2004 21:08
    GienekS
    Poziom 32  

    Co to jest za funkcja:
    floor
    Nie kompiluje się na WinAVR

    0
  • #3 27 Sie 2004 21:53
    pasikx
    Poziom 12  

    To jesli dobrze pamietam zaokraglenie do pelnej wartosci w dol.

    Kompiluje sie na WinAVR-20040720, i na wersji z kwietnia rownierz !

    0
  • #4 27 Sie 2004 22:17
    GienekS
    Poziom 32  

    Ja mam wersję 20040404 i nie kompiluje się.

    0
  • #5 27 Sie 2004 22:47
    pasikx
    Poziom 12  

    GienekS napisał:
    Ja mam wersję 20040404 i nie kompiluje się.


    Dla sprawdzenia odinstalowalem wersje 20040720, i zainstalowalem starsza 20040404.

    Program kompiluje sie poprawnie!

    Oto wyjscie z kompilatora:
    Code:


    > "make.exe" all

    -------- begin --------
    avr-gcc (GCC) 3.3.2
    Copyright (C) 2003 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


    Compiling: projekt_1.c
    avr-gcc -c -mmcu=atmega32 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=projekt_1.lst  -std=gnu99 -Wp,-M,-MP,-MT,projekt_1.o,-MF,.dep/projekt_1.o.d projekt_1.c -o projekt_1.o

    Compiling: lcd_io.c
    avr-gcc -c -mmcu=atmega32 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=lcd_io.lst  -std=gnu99 -Wp,-M,-MP,-MT,lcd_io.o,-MF,.dep/lcd_io.o.d lcd_io.c -o lcd_io.o

    Linking: projekt_1.elf
    avr-gcc -mmcu=atmega32 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=projekt_1.o  -std=gnu99 -Wp,-M,-MP,-MT,projekt_1.o,-MF,.dep/projekt_1.elf.d projekt_1.o lcd_io.o   --output projekt_1.elf -Wl,-Map=projekt_1.map,--cref -Wl,-u,vfprintf -lprintf_flt -lm

    Creating load file for Flash: projekt_1.hex
    avr-objcopy -O ihex -R .eeprom projekt_1.elf projekt_1.hex

    Creating load file for EEPROM: projekt_1.eep
    avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
    --change-section-lma .eeprom=0 -O ihex projekt_1.elf projekt_1.eep

    Creating Extended Listing: projekt_1.lss
    avr-objdump -h -S projekt_1.elf > projekt_1.lss

    Creating Symbol Table: projekt_1.sym
    avr-nm -n projekt_1.elf > projekt_1.sym

    Size after:
    projekt_1.elf  :
    section     size      addr
    .text      13282         0
    .data        598   8388704
    .bss          70   8389302
    .noinit        0   8389372
    .eeprom       17   8454144
    .stab      13296         0
    .stabstr    5700         0
    Total      32963



    Errors: none
    -------- end --------


    > Process Exit Code: 0

    --------------------------

    0
  • #6 28 Sie 2004 13:14
    aristo666
    Poziom 11  

    pasikx napisał:
    Wlasnie ukonczylem program na mikrokontroler AVR ATmega32 realizujacy funkcje prostego komputerka samochodowego.

    Komputerek jak narazie ma nastepujace funkcje:
    - pokazuje wartosc napiecia akumulatora (ADC wbudowany w ATmega32)
    - pokazuje aktualny czas (PCF8583)
    - mierzy temperature z trzech niezaleznych czujnikow np. w samochodzie, na zewnatrz, oraz temp. silnika (DS18B20)
    - posiada pamiec 2 stanow licznika kilometrow (wartosci wpisywane recznie - za pomoca przyciskow)
    .....................
    .....................
    Czekam na wasze propozycje zwiazane z rozbudowa ukladu !


    Bardzo ciekawy pomysl, ja zbudowalem podobne urządzenie,
    w swoim ukladzie mam zegar, obrotomierz, predkosciomierz, licznik przebiegu ... i wlasnie tez pracuje nad pomiarami temperatury, ciśnienia oleju itp
    ostatnio widzialem na discovery uklad ktory zbieral w samochodzie wyscigowym wszystkie parametry silnika po wyscigu mozna bylo przeslac dane do kompa i analizowac parametry .... naprawde niezla sprawa. Warta przemyslenia.

    0
  • #7 28 Sie 2004 22:53
    pasikx
    Poziom 12  

    aristo666 napisał:
    Bardzo ciekawy pomysl, ja zbudowalem podobne urządzenie,
    w swoim ukladzie mam zegar, obrotomierz, predkosciomierz, licznik przebiegu ... i wlasnie tez pracuje nad pomiarami temperatury, ciśnienia oleju itp
    ostatnio widzialem na discovery uklad ktory zbieral w samochodzie wyscigowym wszystkie parametry silnika po wyscigu mozna bylo przeslac dane do kompa i analizowac parametry .... naprawde niezla sprawa. Warta przemyslenia.


    A w jaki sposob zrealizowales predkosciomierz, oraz obrotomierz ?

    0
  • #8 29 Sie 2004 09:41
    aristo666
    Poziom 11  

    Obrotomierz:
    pomiar impulsów sterujących cewką zapłonową w jednostce czasu.
    Jeśli dokładnie dobierzemy czas w którym zliczamy to będziemy mieli właśnie obroty.
    rozważania
    2000 obr/min z taka predkoscia pracuje sobie silnik
    4000 imp/min liczba impulsow sterujacych cewka dla silnika 4suw. 4 cyl.
    66.66 liczb imp/sec
    z proporcji mozna obliczyc czas pomiaru, jesli czas zliczania impulsów bedzie 0,3 sec.
    Dla rozważanej prędkości obroptowej w czasie 0,3 sec zliczymy 20 impuslow.
    Teraz juz tylko wystarczy wyswietlic dwa zera i mamy 2000 obr / min na wyswietlaczu.
    Czyli sygnał z cewki podajemy bądz na licznik, bądz zliczamy sobie "recznie" sprawdzamy stan pinu i inkrementujemy jakis rejestr.
    Rozwiazanie jest dosyc proste niestety jest obarczone pewnym bledem
    po pierwsze dokladnosc tylko 100 obr / min ale w przypadku obrotomierza pomwinno wystarczyc.
    PREDKOSCIOMIERZ :
    Sygnał ze skrzyni który idzie do komputera,
    dokladnie tak samo jak obrotomierz, tylko nalezy doswiadczalnie dobrac czas zliczania impulsow.

    0
  • #9 29 Sie 2004 12:46
    MAREK74
    Poziom 20  

    Cześć

    Ja w swoim mam obrotomierz z dokładniością do 10 obr.
    Na '51 mierze czas miedzy impulsami z halla a potem 3000000 dziele przez ten czas i już.
    Kwarc 12MHz.
    Co wy na to ?
    A czym mierzysz ciśnienie oleju?

    0
  • #10 29 Sie 2004 13:01
    aristo666
    Poziom 11  

    MAREK74 napisał:
    Cześć

    Ja w swoim mam obrotomierz z dokładniością do 10 obr.
    Na '51 mierze czas miedzy impulsami z halla a potem 3000000 dziele przez ten czas i już.
    Kwarc 12MHz.
    Co wy na to ?
    A czym mierzysz ciśnienie oleju?

    no i słusznie, z tym pomiarem czasu miedzy impulsami, też tak na początku chciałem zrobić żeby osiągnąć większość dokladność, ale przy obrotomierzu raczej nie jest to aż takie potrzebne ....

    Ciśnienie oleju mierze odpowiednim czujnikiem, który jest w moim przypadku standardowo zamontowany już przy silniku, i tylko sygnał na przetwornik A/C i do wyskalowania. Większość silników posiada tylko czujnik dwupolożeniowy (ciśnienie jest / ciśnienia nie ma) więc należaoby sie zaopatrzyć w inny czujnik.

    0
  • #11 29 Sie 2004 13:40
    pasikx
    Poziom 12  

    MAREK74 napisał:
    ...................
    Na '51 mierze czas miedzy impulsami z halla a potem 3000000 dziele przez ten czas i już.


    Ciekawe rozwiązanie...
    Wiec moze zamiescisz tu schemat w jaki sposob podpiales mikrokontroler pod ten czujnik jesli masz juz sprawdzony sposób ?!

    0
  • #12 29 Sie 2004 21:36
    MAREK74
    Poziom 20  

    nie widzę w tym żadnej filozofii
    po przez np. 10k do bazy BC237 ,a kolektor na INT0 i tyle.

    własnie chodzi o ten czujnik co by wkręcić w głowice nie tak łatwo go dostac.

    zastanawiam sie czemu otworzyliscie nowy post o tym temacie jak są już takie na forum i trza było się dołączyć ,a tak to jest tam cicho :(

    0
  • #13 01 Wrz 2004 21:12
    majonezz
    Poziom 18  

    Też aktualnie cos takiego konstruuje na atmega16, pcf8583 i LCD od nokii. Mam juz poprawne odczyty prędkości chwilowej, maksymalnej, średniej oraz przebytej drogi, temperature i takie tam. Przede mną jeszcze pomiar zużycia paliwa i tu się pewnie zatrzymam na dłużej, bo mam LPG 2 gen.
    Jeśli chodzi o pomiar drogi i prędkości to skoda 1,3 nie miała przetwornika drogi. Trzeba było zrobić na hallotronie. Jeśli kogoś interesuje sposób wykonania, to zapraszam do dyskusji.
    Oprogramowanie tworzę niestety w bascomie ;)

    tak to wygląda

    0
  • #14 01 Wrz 2004 22:00
    jasiekz
    Poziom 14  

    majonez a jaki tl jest lcd od noki podaj parametry?

    0
  • #15 01 Wrz 2004 22:22
    piotruch
    Poziom 17  

    Byłoby fajnie gdyby układ współpracował z wyświetlaczem Opla. Podobnie jak układ na tej stronie http://www.eelkevisser.nl/tacho.htm

    Inna opcja, która mi przychodzi do głowy to dodatek do termometru - wyjście sterujące klimatyzacją manualną.

    pozdrawiam

    0
  • #16 01 Wrz 2004 23:00
    zumek
    Poziom 39  

    pasikx napisał:
    Wlasnie ukonczylem program na mikrokontroler AVR ATmega32 realizujacy funkcje prostego komputerka samochodowego.

    Komputerek jak narazie ma nastepujace funkcje:
    - pokazuje wartosc napiecia akumulatora (ADC wbudowany w ATmega32)
    - pokazuje aktualny czas (PCF8583)
    - mierzy temperature z trzech niezaleznych czujnikow np. w samochodzie, na zewnatrz, oraz temp. silnika (DS18B20)
    - posiada pamiec 2 stanow licznika kilometrow (wartosci wpisywane recznie - za pomoca przyciskow)

    Calosc sterowana jest za pomoca 3 przyciskow microswitch, a wyniki wyswietlane sa na LCD 2x16 (HDD44780).
    ...
    Czekam na wasze propozycje zwiazane z rozbudowa ukladu !


    Witam.

    To chyba planujesz go mocno rozbudować jak chcesz użyć do tego ATMega 32.

    Życze powodzenia.

    Piotrek Sz.

    0
  • #17 01 Wrz 2004 23:01
    leoha
    Poziom 16  

    Witam
    Ja w sprawie:

    majonezz napisał:
    (...)
    Jeśli chodzi o pomiar drogi i prędkości to skoda 1,3 nie miała przetwornika drogi. Trzeba było zrobić na hallotronie. Jeśli kogoś interesuje sposób wykonania, to zapraszam do dyskusji.


    Opisz jak wykonales to hardwarowo tzn ten hallo oraz co gdzie i jak ....

    0
  • #18 01 Wrz 2004 23:29
    MAREK74
    Poziom 20  

    Panowie avałerowcy podajcie pare wskazówek odnośnie obsługi przetwornika A/C w TINY26 w asm bo narazie podchodze do tego jak pies do jeża :).
    buduje moduł zewnętrzny do komputera pokładowego który musi mierzyć napięcie z pływaka no i wymyśliłem że to będzie ten AVR bo jest mały i ma A/C

    0
  • #19 02 Wrz 2004 08:07
    sancio
    Poziom 13  

    majonezz napisał:
    Też aktualnie cos takiego konstruuje na atmega16, pcf8583 i LCD od nokii.


    Jak podłączyłeś wyświetlacz do atmega16? Zasilałeś wszystko napięciem 3.3V czy stosowałeś jakieś konwertery napięcia? Dało by rade schemacik wrzucić??

    0
  • #20 02 Wrz 2004 08:29
    Tomek22
    Poziom 12  

    sancio te konwertery to diodki zenera i rezystorki na liniach steryjących, ale kiedyś widziałem taki schemacik że na zasilaniu LCD 3,3V, a poziomy logiczne 5V i działało długo i szczęśliwie bez konwerterów...

    0
  • #21 02 Wrz 2004 08:43
    Zoll
    Poziom 13  

    Cytat:
    Też aktualnie cos takiego konstruuje na atmega16, pcf8583 i LCD od nokii. Mam juz poprawne odczyty prędkości chwilowej, maksymalnej, średniej oraz przebytej drogi, temperature i takie tam. Przede mną jeszcze pomiar zużycia paliwa i tu się pewnie zatrzymam na dłużej, bo mam LPG 2 gen.
    Jeśli chodzi o pomiar drogi i prędkości to skoda 1,3 nie miała przetwornika drogi. Trzeba było zrobić na hallotronie. Jeśli kogoś interesuje sposób wykonania, to zapraszam do dyskusji.
    Oprogramowanie tworzę niestety w bascomie



    A mozesz wyslac mi na priv schemacik i soft albo czy mozesz udostepnic go na forum??

    0
  • #22 02 Wrz 2004 21:04
    majonezz
    Poziom 18  

    Cytat:
    majonez a jaki tl jest lcd od noki podaj parametry?

    LCD od nokii 3310 (na pcd8544).
    Cytat:
    Opisz jak wykonales to hardwarowo tzn ten hallo oraz co gdzie i jak ....

    Hallotron kupiłem jakiś uniwersalny o wyjściu TTL. W skodzie prędkościomierz ma takie wycięcie od drugiej strony, gdzie widać jego cały ustrój. Tam występuje zmienne pole magnetyczne w zależności od obrotów linki. Wykonanie takiego czegoś jest banalne. Bierzesz kawałek płytki uniwersalnej, wlutowujesz hallo i tak dopasowujesz jego nogi, żeby był jak najbliżej tego pola magnetycznego (obserwujesz czy daje impulsy). Później przykręcasz płytkę do istniejących otworów i gotowe. Taki hallotron wymaga jeszcze zasilania +5V. Podobno jest jeszcze możliwość zrobienia tego na fotoelementach, ale hallo spokojnie wystarcza.
    Cytat:
    Jak podłączyłeś wyświetlacz do atmega16? Zasilałeś wszystko napięciem 3.3V czy stosowałeś jakieś konwertery napięcia? Dało by rade schemacik wrzucić??

    atmega jest zasilany +5V. Konwerter to zwykłe rezystorki 1k a zasilanie przez 300Ohm +zenerka 3,3V. W/g mnie nie ma sensu komplikować układu konwerterem. Nie miałem problemu do tej pory z wyświetlaczem - nic się z nim nie dzieje złego. Schemat mysle, ze nie jest konieczny. Podobno działa też bezpośrednie połączenie i zasilanie LCD 5-cioma voltami, ale wolalem nie ryzykowac.
    Cytat:
    A mozesz wyslac mi na priv schemacik i soft albo czy mozesz udostepnic go na forum??

    Udostepnie jak go narysuje :)

    0
  • #23 02 Wrz 2004 21:09
    sancio
    Poziom 13  

    Aha, też mam te diodki i rezystorki... myslałem, że jest tam może jakieś inne rozwiązanie warte zainteresowania :) Działa ono u mnie wporządku! Co do tych 5V na linie sterujące to nie bede raczej dawał (choć to uprości układ) bo to już jest praca na granicy...

    Chętnie bym się dowiedział jak prosto a zarazem porządnie zrobić przetwornik drogi. Mam Fieste MK3 1.3 i chciałbym tam wsadzić taki mały komputerek co by mierzył te najbardziej interesujące wartości jak zużycie chwilowe i średnie paliwa. Wie może ktoś jak się wpiąć w elektryke wtrysku i wogóle jakie to ma sygnały podczas działania. Może już ktoś to montował w takim autku?

    0
  • #24 02 Wrz 2004 21:31
    majonezz
    Poziom 18  

    sancio napisał:
    Aha, też mam te diodki i rezystorki... myslałem, że jest tam może jakieś inne rozwiązanie warte zainteresowania :) Działa ono u mnie wporządku! Co do tych 5V na linie sterujące to nie bede raczej dawał (choć to uprości układ) bo to już jest praca na granicy...

    Chętnie bym się dowiedział jak prosto a zarazem porządnie zrobić przetwornik drogi. Mam Fieste MK3 1.3 i chciałbym tam wsadzić taki mały komputerek co by mierzył te najbardziej interesujące wartości jak zużycie chwilowe i średnie paliwa. Wie może ktoś jak się wpiąć w elektryke wtrysku i wogóle jakie to ma sygnały podczas działania. Może już ktoś to montował w takim autku?

    Co do wtryskiwaczy - ja zastosowałem inwerter CMOS ze schmittem, zasilany oczywiscie 12v. Później jest rezystor i zenerka 5,1V na wejściu atmegi.

    0
  • #25 02 Wrz 2004 22:20
    sancio
    Poziom 13  

    majonezz napisał:

    Co do wtryskiwaczy - ja zastosowałem inwerter CMOS ze schmittem, zasilany oczywiscie 12v. Później jest rezystor i zenerka 5,1V na wejściu atmegi.


    No to rozumiem... Podpinam wejscie CMOS'a do sygnału wtryskiwacza.... Po wyjściu z tego układziku mam juz sygnał 0-5V...... Ale co dalej? Jaki charakter ma ten sygnał. Na chłopski rozum to tam będą dwa stany 0 i 1, jak jest jeden z nich to w tym czasie jest wtryskiwane paliwo, jak jest drugi to nie. Jeśli się mylę to mnie popraw :)
    Tylko czy tam nie ma jakich kruczków?? Wystarczy np w czasie 1 sekundy zmierzyć czas trwania jednego ze stanów i już mamy zużycie paliwa w pewnych jednostach (bo na litry to jeszcze trzeba wiedzieć ile jest wtryskiwane) na sekundę??

    Skoro już takie coś zrobiłeś podpowiedziałbyś np jak wygląda taki przebieg chodzi głównie o wypełnienie dla np 900 RPM. Chodzi o jakiś punk zaczepienia bym wiedział co mniejwięcej mam zliczać :)

    0
  • #26 08 Wrz 2004 10:03
    spektra
    Poziom 18  

    Na wyjsciu Schmita są dwa stany. Dla pomiaru zużycia chwilowego paliwa potrzebna jest informacja o długości trwania stanu w którym wtryskiwacz jest otwarty w ms. Czas otwarcia wtryskiwacza jest różny i zaczyna się od około 4 ms. Jeżeli jest znany wydatek wtryskiwacza np. ml/ms to już sprawa arytmetyki. Jednak w swoim przypadku - Opel Vectra 1.6 nie mogę znaleźdz nigdzie informacji o stałej wtryskiwacz.
    Chyba zostanie mi metoda kalibracji.
    Buduję podobne urządzenie na Atmega 32.
    Pozdrawiam

    0
  • #27 19 Wrz 2004 00:18
    Rocky24
    Poziom 19  

    Witam serdecznie mam plan żeby zrobić wyświetlacz alfanumeryczny 4 x 20 lub mniejszy do wozu i ma on wyświetlacz tylko czy wszystkie 4 drzwi są niedomknięte,tak samo maska zarówno przednia i tylko
    Wiec zauszmy niedomknięte są drzwi wiec na wyświetlaczu pisze "3 door open" itp.
    Czy ktoś już myślał nad takim czymś? Potrzebuje to do Toyoty Hilux, ale to już mniejsza z tym.
    Pozdrawiam

    0
  • #28 01 Kwi 2005 16:04
    Wilku
    Poziom 17  

    Witam. Właśnie próbuję wykonać obrotomierz. Chciałem zastosować cewkę nawiniętą na przewód do świecy jako "czujnik". Mierzę czas pomiędzy impulsami. Niestety nic mi z tego nie wychodzi. Wynik oprócz prawidłowego przeskakuje na wartości kilka razy mniejsze lub większe. Jeśli chodzi o słuszność zastosowania cewki - to taki mam wymóg od zleceniodawcy. Nie wiem, czy przy takim sposobie zbierania informacji, rozdzielczość 10obr/min jest wogóle do osiągnięcia. Ma ktoś jakieś doświadczenia z takim pomiarem? Może któs ma jakiś schemat układu wejściowego do cewki nawijanej na przewód. Bo mój się raczej nie sprawdza. A może przerzucić się na pomiar imp. w określonym czasie?

    0
  • #29 01 Kwi 2005 17:01
    LordBlick
    VIP Zasłużony dla elektroda

    W czasie 3 sekund uzyskasz więcej impulsów. Cewce warto dać diodę gaszącą rezonans równolegle, w praktyce, lekko silniejszą diodę Zenera, lub cosik szybszego (transil).
    Light-I

    0
  • #30 01 Kwi 2005 18:39
    Wilku
    Poziom 17  

    3 sekundy to za dużo. Odświeżanie wyniku co 3 sekundy nie będzie za bardzo wyglądało. Już lepiej co 1,2s i mnożyć x50. Otrzymamy rozdzielczość 50 i wynik w obr/min.

    0