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.

Atmega 16 , Bascom , czujnik poziomu .

greg16 12 Sie 2011 22:04 1423 10
  • #1 12 Sie 2011 22:04
    greg16
    Poziom 15  

    Witam, na wstępie zaznaczam, że jestem elektrykiem i uC są dla mnie nie do końca zrozumiałe . Mam problem ze swoim układem . Jest to czujnik poziomu dla 2 zbiorników wody . Dane z każdego czujnika są podawane na uC za pomocą 5 bitów . Wykorzystałem porty B oraz D jako wejscia . W zależności od stanu na wejściu portu , na wyświetlaczu jest procentowa zawartość wody odczytana z tablicy , której indeksy są właśnie odwzorowaniem portów. Układ działa ale nie do konca . Port B nie reaguje na podanie stanów na wejscia . Port D działa ok - wyświetla poziom wody . Na symulatorze w BASCOMIE wszystko działa poprawnie . Zamieszczam program . Proszę o jakąkolwiek pomoc z waszej strony . Pozdrawiam .

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Proszę używać tagów "syntax" - poprawiłem.
    [zumek]

    0 10
  • #3 12 Sie 2011 22:13
    greg16
    Poziom 15  

    Tak JTAG wyłączony.

    0
  • #4 12 Sie 2011 22:23
    Kuniarz
    Moderator Projektowanie

    Może masz jakieś stany przejściowe, że jednocześnie aktywne są np. portb.1 i portb.2 - wówczas nie mając takiej wartości wyświetli się 0.
    Myślę, że lepiej użyć "case select" i na podstawie zakresu portu odpowiednio ustalać wartość zmiennej określającej procent.
    Jeśli podłączysz ten sam czujnik do portu D to działa poprawnie ?

    0
  • #5 12 Sie 2011 22:31
    greg16
    Poziom 15  

    Czujniki są sprawne . Zarówno pierwszy jak i drugi poprawnie działa na porcie D . Dodam również , że próbowałem podpiąć to pod port A i tam sytuacja jest identyczna - nie czyta stanów na wejściu . Czy możliwe jest , że uszkodzony jest uC ?? Port B raczej działa bo programuje USB ASP który podłączam do tego właśnie portu .

    0
  • #8 13 Sie 2011 12:58
    greg16
    Poziom 15  

    Tak programator odłączam.

    0
  • #9 13 Sie 2011 16:14
    Fredy
    Poziom 27  

    Zmień na chwilę progam tak aby wyświtlał stany portów, czyli zamiast

    P = Pinb
    .....
    .....
    Lcd C(p)


    zrób :
    P = Pinb
    .....
    .....
    Lcd p

    Wtedy zobacz czy liczby wyświetlane są takie jakimi wypełniłeś tablicę C().
    Może po prostu mijasz się z danymi.
    A swoją drogą do konwersji 11 liczb użycie tablicy 255 elemntowej to już niesamowita przesada.

    Czemu nie zrobisz tego z instrukcją select case,albo chociaż na 10 ifach. ?

    0
  • #10 13 Sie 2011 17:34
    greg16
    Poziom 15  

    Dziekuje za wszystkie odpowiedzi .
    Jezeli chodzi o program to wygląda ona na poprawny , na symulatorze wszystko działa jak trzeba . w rzeczywistosci nie czyta mi portu B . Początkowo myślałem , że wina jest programu . Jutro będę miał nowy uC wiec zobaczymy w czym lezy problem.

    Dodano po 56 [minuty]:

    Witam . Zanalazłem inną atmegę i wszystko działa już poprawnie . Jak widac problem był z uC . Mam jeszcze jedno pytanie . Jak zrobić żeby nie migało wyświetlaczem?? widać odświeżanie . Program pozostał ten sam co w pierwszym poście . Taktowanie zegara wewnętrznym oscylatorem 4MHz. Pozdrawiam.

    0
  • Pomocny post
    #11 13 Sie 2011 17:50
    Kuniarz
    Moderator Projektowanie

    greg16 napisał:
    Mam jeszcze jedno pytanie . Jak zrobić żeby nie migało wyświetlaczem?? widać odświeżanie


    Nie dawaj CLS w pętli, tylko raz przed pętlą, a wewnątrz tylko ustawiaj kursor na danej pozycji np:
    Locate 1,1
    LCD cośtam ; " " - kilka spacji za treścią skasuje resztki po poprzeniej wartości, jeśli nowa jest wyrażona mniejszą ilością cyfr (np najpierw jest 123, póżniej 56, to "3"jkę trzeba zamazać spacją)

    0
  Szukaj w 5mln produktów