logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Atmega32]Własna przejściówka pilota sterowania radia Renault-> Sony

jasiek89 03 Sie 2011 01:28 5937 14
REKLAMA
  • #1 9786855
    jasiek89
    Poziom 17  
    Witam serdecznie!
    Na wstępie powiem że procesor atmega nie widzę pierwszy raz, jednak pierwszy raz zabrałem się za programowanie Atmegi32 i właściwie można powiedzieć że to mój "pierwszy poważny raz".

    Pomysł wziął się stąd że zapragnąłem posiadać fabrycznego pilota sterowania radia z pod kierownicy w Renault Clio II ph 2 1.2 8V (notabene bardzo ekonomiczne auto:D). Powstał pomysł, zobaczyłem że nowy pilot do Radia Sony kosztuje tyle samo co radio, więc popukałem się w głowę i powiedziałem że jeżeli mam już płacić krocie to chociaż chce mieć w to jakiś wkład i wynieść jakąś wiedzę.
    Tak więc schemat pilota renault i pilota sony zamieściłem w załącznikach.

    Pojawił się jednak problem przy programowaniu.
    To co spłodziłem wygląda mniej więcej tak:


    [code]
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Pytania na dzień dzisiejszy są dwa:
    1. Czy warunki sprawdzania pozycji rolki przełączania odpowiednik seek+ seek- nie powinien znajdować się przed rozpoczęciem pętli głównej programu?
    2. Jak wyeliminować pozostałe błędy i ostrzeżenia, a mianowicie:

    Build started 3.8.2011 at 01:22:22
    avr-gcc -mmcu=atmega32 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT renault.o -MF dep/renault.o.d -c ../renault.c
    In file included from ../renault.c:9:
    c:/winavr-20090313/lib/gcc/../../avr/include/util/delay.h:85:3: warning: #warning "F_CPU not defined for <util/delay.h>"
    ../renault.c: In function 'function':
    ../renault.c:115: warning: no return statement in function returning non-void
    avr-gcc -mmcu=atmega32 -Wl,-Map=renault.map renault.o -o renault.elf
    c:/winavr-20090313/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr5/crtm32.o:(.init9+0x0): undefined reference to `main'
    make: *** [renault.elf] Error 1
    Build failed with 1 errors and 2 warnings...

    Wiadomości:
    Loaded plugin STK500
    Loaded plugin Atmel AVR Assembler
    Loaded partfile: C:\Program Files (x86)\Atmel\AVR Tools\PartDescriptionFiles\ATmega16
    Loaded plugin AVR GCC
    Loaded partfile: C:\Program Files (x86)\Atmel\AVR Tools\PartDescriptionFiles\ATmega32.xml


    Schematy:
    [Atmega32]Własna przejściówka pilota sterowania radia Renault-> Sony [Atmega32]Własna przejściówka pilota sterowania radia Renault-> Sony
  • REKLAMA
  • #2 9787225
    piotrva
    VIP Zasłużony dla elektroda
    1. nie masz funkcji main - to podstawa programu w C
    2. funkcja function zwraca typ int, tymczasem nie masz nigdzie return: dodaj return z wartością lub mień typ funkcji na void
  • REKLAMA
  • #3 9787330
    jasiek89
    Poziom 17  
    piotrva napisał:
    1. nie masz funkcji main - to podstawa programu w C
    2. funkcja function zwraca typ int, tymczasem nie masz nigdzie return: dodaj return z wartością lub mień typ funkcji na void

    Szanowny piotrva bardzo dziękuję za odpowiedź

    Main już jest, ale nadal są problemy:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Błędy:

    
    rm -rf renault.o  renault.elf dep/* renault.hex renault.eep renault.lss renault.map
    Build succeeded with 0 Warnings...
    avr-gcc  -mmcu=atmega32 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT renault.o -MF dep/renault.o.d  -c  ../renault.c
    In file included from ../renault.c:9:
    c:/winavr-20090313/lib/gcc/../../avr/include/util/delay.h:85:3: warning: #warning "F_CPU not defined for <util/delay.h>"
    avr-gcc -mmcu=atmega32 -Wl,-Map=renault.map renault.o     -o renault.elf
    avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature  renault.elf renault.hex
    avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex renault.elf renault.eep || exit 0
    avr-objdump -h -S renault.elf > renault.lss
    
    AVR Memory Usage
    ----------------
    Device: atmega32
    
    Program:     530 bytes (1.6% Full)
    (.text + .data + .bootloader)
    
    Data:          0 bytes (0.0% Full)
    (.data + .bss + .noinit)
    
    
    Build succeeded with 1 Warnings...
    
    
    


    Wiadomości
    Loaded plugin STK500
    Loaded plugin AVR GCC
    Loaded partfile: C:\Program Files (x86)\Atmel\AVR Tools\PartDescriptionFiles\ATmega32.xml
    
  • #4 9787361
    piotrva
    VIP Zasłużony dla elektroda
    Nie masz w opcjach projektu ustawionej częstotliwości taktowania procesora.
  • REKLAMA
  • #5 9787618
    jasiek89
    Poziom 17  
    piotrva napisał:
    Nie masz w opcjach projektu ustawionej częstotliwości taktowania procesora.

    Tak, wiem tylko właśnie nie wiem jak mam ja ustawić znaczy rozumiem że ma być to
    #definie F_CPU, ale ile ona powinna wynosić?
  • #6 9787641
    piotrva
    VIP Zasłużony dla elektroda
    Korzystasz z Avr Studio 4 więc wchodzisz w opcje projektu i tam masz okeinko do wpisania częstotliwości taktowania układu w Hz. Ewentualnie (co jest niezbyt zgrabną metodą) piszesz w pliku main to #define F_CPU i podajesz częstotliwość w Hz.
  • #7 9787714
    jasiek89
    Poziom 17  
    piotrva napisał:
    Korzystasz z Avr Studio 4 więc wchodzisz w opcje projektu i tam masz okeinko do wpisania częstotliwości taktowania układu w Hz. Ewentualnie (co jest niezbyt zgrabną metodą) piszesz w pliku main to #define F_CPU i podajesz częstotliwość w Hz.


    Ok, a czy to jest częstotliwość taktowania podana w nocie katalogowej? 16MHz
    Czyli konfiguracja ma wyglądać tak:
    [Atmega32]Własna przejściówka pilota sterowania radia Renault-> Sony

    
    
    rm -rf renault.o  renault.elf dep/* renault.hex renault.eep renault.lss renault.map
    Build succeeded with 0 Warnings...
    avr-gcc  -mmcu=atmega32 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT renault.o -MF dep/renault.o.d  -c  ../renault.c
    avr-gcc -mmcu=atmega32 -Wl,-Map=renault.map renault.o     -o renault.elf
    avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature  renault.elf renault.hex
    avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex renault.elf renault.eep || exit 0
    avr-objdump -h -S renault.elf > renault.lss
    
    AVR Memory Usage
    ----------------
    Device: atmega32
    
    Program:     530 bytes (1.6% Full)
    (.text + .data + .bootloader)
    
    Data:          0 bytes (0.0% Full)
    (.data + .bss + .noinit)
    
    
    Build succeeded with 0 Warnings...
    


    Czyżby było ok?
  • #8 9787831
    piotrva
    VIP Zasłużony dla elektroda
    Jest ok, ale tam podajesz częstotliwość jaką masz taktowany układ (zgodnie z wyborem CKSEL we Fusebitach i ewentualnym podłączonym kwarcem/układem RC), a nie co w DS piszą o maksymalnych możliwościach. Jeśli nie zmieniałeś fusebitów to masz najprawdopodobniej 1 MHz
  • #9 9787896
    jasiek89
    Poziom 17  
    Nic nie zmieniałem czyli muszę te częstotliwość zmienić na 1MHz?
  • #10 9787948
    xdf0r
    Poziom 13  
    Nie zmienić tylko zadeklarować w kodzie częstotliwość 1MHz
  • #12 9817357
    jasiek89
    Poziom 17  
    Witam! Dokonałem pewnych modyfikacji w kodzie gdyż okazuje się że rolka zwiera chwilowo a nie cały czas, tak więc kod jest zmieniony w pełni się kompiluje jednak chciałbym poprosić jakiegoś fachowca o sprawdzenie czy dobrze pojąłem sterowanie odpowiednimi pinami.
    Przykładowo dla tego fragmentu kodu:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Ja interpretuję to tak:
    Jeżeli nóżki portu C, 6 i 5 są zwarte to wystaw na 010000 poczekaj 200 ms a następnie wyzeruj cały port D


    Cały kod przedstawia się następująco:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Cały czas nie do końca rozumiem, jak działa ten PORT PIN (DDR - już wiem że to tylko ustawienie wejścia albo wyjścia) Ale czym różni się PORT od PIN jakoś zrozumieć do końca nie mogę.
    Jeżeli ktoś może to sprawdzić jak najszybciej byłbym wdzięczny, a jeżeli ktoś mi wytknie błędy to będę dozgonnie wdzięczny.

    Acha... najważniejsze może, procesor to atmega8 - raz że tańszy 2 że taki był pod ręką
  • REKLAMA
  • #13 9817690
    dondu
    Moderator na urlopie...
    jasiek89 napisał:
    Cały czas nie do końca rozumiem, jak działa ten PORT PIN (DDR - już wiem że to tylko ustawienie wejścia albo wyjścia) Ale czym różni się PORT od PIN jakoś zrozumieć do końca nie mogę.


    Może teraz Ci się uda:

    [Atmega32]Własna przejściówka pilota sterowania radia Renault-> Sony
  • #14 9818617
    jasiek89
    Poziom 17  
    dondu napisał:
    jasiek89 napisał:
    Cały czas nie do końca rozumiem, jak działa ten PORT PIN (DDR - już wiem że to tylko ustawienie wejścia albo wyjścia) Ale czym różni się PORT od PIN jakoś zrozumieć do końca nie mogę.


    Może teraz Ci się uda:

    [Atmega32]Własna przejściówka pilota sterowania radia Renault-> Sony


    Pomogłeś jak nigdy :D
  • #15 9854855
    jasiek89
    Poziom 17  
    Witam, ponownie odświeżam, napisałem już obsługę klawiaturki, która jest łudząco podobna do tego pilota, jednak powstał efekt "stanu nieustalonego" tak jak bym go nazwał, podczas wciskania.

    Kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Filmik z problemem można dostrzec ale trzeba się wpatrzeć, np. Wciskam 1 przycisk, i zapala się na ułamek sekundy 5 po czym zapala się 1 i trzyma jak trzeba.

    Filmik badziewnej jakości ale zawsze:



    Proszę o pomoc w zakresie eliminacji tego zjawiska, tylko jak do prostego chłopa.
    W tym miejscu dodać, ująć, poprawić to i to...
REKLAMA