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.

[bascom] - Atmega32, a projekt dla Atmega8

chomiczekOKP 01 Gru 2014 14:51 1149 12
  • #1 01 Gru 2014 14:51
    chomiczekOKP
    Poziom 12  

    Mam problem z przerwaniami, a raczej z pewną różnicą w budowie Atmega8 i Atmega32, a mianowicie mam program, który działa prawidłowo na Atmega8

    poniżej fragment

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    tak jak jest opisane w komentarzach wejście sygnału ma iść do AIN0, a do AIN1 ma być podpięta masa.

    Problem jest taki, że z Atmega32 to nie działa, pokazuje dziwne rzeczy, problem pewnie jest to, że PB2 (na Atmega32) to nie jest tylko AIN0, ale INT2/AIN0, podobnie jak PB3 to nie tylko AIN1, ale OC0/AIN1.

    Na Atmega8 nie ma tego problemu, bo PD6 to AIN0, a PD7 to AIN1.

    znalazłem coś takiego, ale jako, że zaczynam swoją przygodę z bascomem to nie bardzo rozumie co z tego wynika.

    [bascom] - Atmega32, a projekt dla Atmega8

    Jakaś sugestia/pomoc?

    0 12
  • #3 01 Gru 2014 20:52
    chomiczekOKP
    Poziom 12  

    A jak to zrobić w bascom?

    0
  • #5 01 Gru 2014 21:56
    emarcus
    Poziom 35  

    chomiczekOKP napisał:
    A jak to zrobić w bascom?


    To zazwyczaj robi się w ustawieniach fusebitów:
    -bit (6) szósty w Fuse Byte High ma byc (1) czyli nie zaprogramowany.

    A jeżeli chcesz to robic w "Run-time", to w Bascom wygląda to tak:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    JTAG masz na porcie C na którym masz także wyjścia na dwie diody.
    Fabrycznie te piny są zajęte przez JTAG, zatem nie spełniaja one funkcji GPI/O.

    Przeanalizuj czy poprawnie interpretujesz funkcję 'compare'...


    e marcus

    0
  • #6 01 Gru 2014 22:12
    chomiczekOKP
    Poziom 12  

    Wydaje mi się, że problem nie dotyczy wyjścia na diody (bo one tak naprawdę tylko w pewnym momencie programu sygnalizują jego etap), problemem jest chyba wejście sygnału do procesora (tak mi się wydaje). Wyjście mogę wyłączyć, bo de facto nie ma to żadnego znaczenia dla sensu czy działania.

    0
  • #7 01 Gru 2014 23:27
    emarcus
    Poziom 35  

    chomiczekOKP napisał:
    Wydaje mi się, że problem nie dotyczy wyjścia na diody (bo one tak naprawdę tylko w pewnym momencie programu sygnalizują jego etap), problemem jest chyba wejście sygnału do procesora (tak mi się wydaje). Wyjście mogę wyłączyć, bo de facto nie ma to żadnego znaczenia dla sensu czy działania.

    Tat właśnie przypuszczałem..
    Wracając do wcześniejszej wypowiedzi:
    Cytat:




    Problem jest taki, że z Atmega32 to nie działa, pokazuje dziwne rzeczy, problem pewnie jest to, że PB2 (na Atmega32) to nie jest tylko AIN0, ale INT2/AIN0, podobnie jak PB3 to nie tylko AIN1, ale OC0/AIN1.

    To akurat nie jest problemem:
    Dla obydwóch portów (PB.2 i PB.3) alternatywne ich funkcje nie są skonfigurowane więc tu nie ma kolizji i pracują one jako zyczajne wejścia.

    Te peryferia, które wykorzystujesz (Timer1 i comparator) w zasadzie nie różnią sie od Mega8.

    Natomiat ten fragment:
    Cytat:


    tak jak jest opisane w komentarzach wejście sygnału ma iść do AIN0, a do AIN1 ma być podpięta masa.

    Co to powoduje zgodnie z definicją (Datasheet) ?
    Gdy AIN0 (+) > AIN1 (-) wtedy wyjście ACO (Analog Comparator Output) = 1
    co zgodnie z programem :

    Config Aci = On , Compare = On , Trigger = Rising


    winien powodowac uruchomienie interruptu IC1, - tego nie ma; owszem masz skok do subrutyny:
    On Icp1 Oncapture '
    ale ICP1 jest interruptem w Mega8 a nie w mega32(!!!)

    Dalej, każde pokazanie się jakiegokolwiek napięcia powyżej 0V na PB2 spowoduje uruchomienie interruptu i chyba Capture wartości Timera1 (zgaduję tą ostatnią funkcję - fragment kodu nie pokazuje treści tej subrutyny).
    czy tak przewiduje program?


    e marcus

    Edit:
    Pomiń to jako błędna informacja...
    "ICP1 jest interruptem w Mega8 a nie w mega32"

    IC1 jest flagą w ACSR, która wywołoje exekucję interruptu jeżeli jest enable.
    Interrupt de-facto jest ICP1
    Wpadłem przypadkiem na inny "tor..."
    Sorry za wprowadzenie w błąd...

    e marcus

    0
  • #8 02 Gru 2014 21:31
    chomiczekOKP
    Poziom 12  

    Hmm.. no dobrze, ale co z tego wynika, bo koniec końców program nie działa na Atmega32, na atmega8 gada.. :/

    0
  • #10 02 Gru 2014 21:41
    chomiczekOKP
    Poziom 12  

    ale pytałem jak to zrobić.. raczkuje w temacie Atmegi.. nie oczekuje rozwiązania, ale nakierowania.. szukałem (być może źle) w google jtag bascom, ale nic nie znalazlem, nic co coś by mi zasugerowało

    0
  • #11 04 Gru 2014 08:22
    chomiczekOKP
    Poziom 12  

    @kunierz
    Tak, jtag jest wyłączony
    [bascom] - Atmega32, a projekt dla Atmega8

    0
  • Pomocny post
    #12 04 Gru 2014 23:18
    373522
    Użytkownik usunął konto  
  • #13 05 Gru 2014 06:58
    emarcus
    Poziom 35  

    chomiczekOKP napisał:

    Tak, jtag jest wyłączony
    [bascom] - Atmega32, a projekt dla Atmega8


    A z jakiego powodu masz zaprogramowany fuse "BOOTRST" ? - ten ostatni na dole tabeli, (Fusebit high D).

    Czy używasz bootloadera?
    Jeżeli nie, to zmień ten bit na (1) i twoja sumaryczna wartośc Fusebitshigh zamiast byc CC, przyjmie wartoścCD.
    [bascom] - Atmega32, a projekt dla Atmega8
    e marcus

    0
  Szukaj w 5mln produktów