Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

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

jasiek89 03 Aug 2011 01:28 5736 14
  • #1
    jasiek89
    Level 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]
    Code: c
    Log in, to see the code


    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
  • #2
    piotrva
    VIP Meritorious for electroda.pl
    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
  • #3
    jasiek89
    Level 17  
    piotrva wrote:
    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:
    Code: c
    Log in, to see the code


    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
    
  • #5
    jasiek89
    Level 17  
    piotrva wrote:
    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
    piotrva
    VIP Meritorious for electroda.pl
    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
    jasiek89
    Level 17  
    piotrva wrote:
    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
    piotrva
    VIP Meritorious for electroda.pl
    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
    jasiek89
    Level 17  
    Nic nie zmieniałem czyli muszę te częstotliwość zmienić na 1MHz?
  • #10
    xdf0r
    Level 13  
    Nie zmienić tylko zadeklarować w kodzie częstotliwość 1MHz
  • #12
    jasiek89
    Level 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:
    Code: c
    Log in, to see the code

    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:
    Code: c
    Log in, to see the code

    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ą
  • #13
    dondu
    Moderator on vacation ...
    jasiek89 wrote:
    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
    jasiek89
    Level 17  
    dondu wrote:
    jasiek89 wrote:
    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
    jasiek89
    Level 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:
    Code: c
    Log in, to see the code


    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...