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

ATMEGA16 - Wyświetlanie rezultatu za pomocą diod niepoprawne

doszet 16 Cze 2014 12:59 1242 6
REKLAMA
  • #1 13712470
    doszet
    Poziom 10  
    Hej,

    mam projekt, w którym na podstawie mikrokontrolera Atmel AVR ATMEGA16L, który jest zamontowany na karcie STK500, mam obliczyć prędkość podłączonego do niego wiatraka komputerowego (wentylatora). Prędkość wiatraka może być sterowana. Pomiar prędkości przeprowadzany jest za pomocą transoptora. Prędkość wiatraka przedstawiona powinna być za pomocą 8 diod (rezultat zaprezentowany jest w postaci binarnej). To tyle tytułem wstępu. Całość jest już stworzona. Jedyny problem jest z prezentacją danych na diodach. Problem jest mianowicie taki, iż wyświetlane są dane, lecz nie te, które są oczekiwane (bynajmniej wg nauczyciela, w sumie ciężko określić z jaką prędkością obraca się wiatrak "na oko"). Problem można naprawić poprzez zmianę kodu bądź schematu połączenia. Niestety, nie mam już możliwości stestowania całości w laboratorium, w którym cały projekt został przeprowadzony, więc pozostaje jedynie kod i schemat połączenia. Jedyny tips jaki otrzymałem, to zapytanie -> które diody zapalą sie w momencie gdy rpm = 1?. Moim zdaniem będzie to dioda nr 0, więc całościowo wynik będzie wyglądać: 00000001 binarnie = 1 rpm
    Z rozmowy z nauczycielem wynikało, iż błąd leży w funkcji main. (jeżeli nie chcę zmieniac schematu połączeń)

    Poniżej załączam pełny kod i schemat. Będę wdzięczny za wszelką pomoc.

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


    ATMEGA16 - Wyświetlanie rezultatu za pomocą diod niepoprawne
  • REKLAMA
  • Pomocny post
    #2 13712734
    el2010tmp
    Poziom 25  
    Ze schematu wynika że diody są sterowane poziomem wysokim więc zamiast:
    PORTC = ~rpm;
    powinno być:
    PORTC = rpm;
    Nie analizowałem głębiej programu, zakładam że zmienna rpm pełni rolę adekwatną do swojej nazwy.
    Również zamiast:
    else PORTC = ~255;
    można dać po prostu:
    else PORTC = 0;
    chociaż to jest akurat dokładnie to samo.
  • REKLAMA
  • #3 13712746
    kindlar
    Poziom 42  
    Nie można dołożyć lcd i wyświetlać obrotów dla sprawdzenia? Z kodu zakres masz chyba 0-255 obr/min to około 4 obr/sek.
  • #4 13712774
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #5 13712807
    doszet
    Poziom 10  
    @kindlar: Niestety nie mam już dostępu do laboratorium w którym cały projekt był przeprowadzany. Założenia projektu były takie, iż mamy zaprezentować wynik na 8 diodach, więc również i z tego powodu nie mogę dołożyć LCD. Zakres jest ograniczony przez ilosc diod i tak jak podałeś to 0-255.

    @el2010tmp: zmienna rpm jest adekwatna do swojej nazwy, czyli ilość obrotów na minutę. RPM obliczane jest w ISR(TIMER1_CAPT_vect). Ilosc interrupts=7, gdyż jest to ilość płatów wiatraka.

    @Albert B.: jakie magiczne słówko :) ?
  • REKLAMA
  • #7 13756473
    doszet
    Poziom 10  
    Dzięki el2010tmp, dokładnie to było problemem :) Projekt zaliczony, temat do zamknięcia :)
REKLAMA