Elektroda.pl
Elektroda.pl
X
Banner Multimetr Fluke 87VBanner Multimetr Fluke 87V
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[atmega8][asm] woltomierz lcd + transmisja danych -usb-pc

10 Sty 2010 13:11 5754 23
  • Poziom 24  
    Witam . Zakładam temat gdyż chciałbym się dowiedzieć nieco na temat jaki próbuje zrealizować .

    W założeniu mam zamiar napisać program do woltomierza . Bardziej mnie martwi transmisja danych przez usb do komputera (na razie chciałbym zapisywać pomiary do pliku txt ) .

    Świecenie diodami na różne sposoby z przerywaniem i przyciskami mam już za sobą .Obecnie sprawdzam jak działa lcd , próbuję zgłębić tajniki wyświetlania łańcuchów i obsługę konwertera adc.

    I pytania :
    - Jak najprościej zorganizować transmisję danych ?
    - Czy do zapisu na komputerze będzie niezbędne dodatkowe oprogramowanie ?

    Oto moje postępy.

    .include "m8def.inc"

    LDI r16,low(ramend)
    out spl,r16
    ldi r16,high(ramend)
    out sph,r16

    ldi r16, $ff
    out ddrd, r16
    out ddrb, r16
    ;------ustawieniaLCD-----------------------
    ; 1DNF
    rcall LCDsetupON
    ldi r17,0b00110000 ;
    out portd,r17 ;
    rcall LCDsetupOFF ;
    rcall czekaj ;

    ;------obsługa ---------------------------
    ; 1BCD
    rcall LCDsetupON
    ldi r17,0b00001111 ; D: Display On/Off
    out portd,r17 ; C: Cursor On/Off.
    rcall LCDsetupOFF ; B: Cursor blink on/off.
    rcall czekaj
    rcall czyszczenie
    ;-----------------------------------------


    ;------
    start:
    rcall czekaj
    rcall czekaj
    rcall LCDdataON
    ldi r17, '<'
    out portd,r17
    rcall LCDdataOFF
    rcall czekaj

    rcall LCDdataON
    ldi r17, 'b'
    out portd,r17
    rcall LCDdataOFF
    rcall czekaj

    rcall LCDdataON
    ldi r17, 'a'
    out portd,r17
    rcall LCDdataOFF
    rcall czekaj
    rcall czekaj
    rcall czekaj
    rcall wiersz2
    rcall czekaj
    rcall czekaj
    rcall LCDdataON
    ldi r17, 'a'
    out portd,r17
    rcall LCDdataOFF

    rcall czekaj
    rcall czekaj
    rcall wprawo
    rcall wprawo
    rcall wprawo
    rcall wprawo
    rcall wprawo
    rcall wprawo
    rcall czekaj
    rcall czekaj
    rcall czyszczenie
    rjmp start

    ;-----przesuniecie-w-lewo-
    wlewo:
    rcall LCDsetupON
    ldi r17,0b00011000
    out portd,r17
    rcall LCDsetupOFF
    rcall czekaj
    ret
    ;-----przesuniecie-w-prawo-
    wprawo:
    rcall LCDsetupON
    ldi r17,0b00011100
    out portd,r17
    rcall LCDsetupOFF
    rcall czekaj
    ret
    ;-----wiersz2--------
    wiersz2:
    rcall LCDsetupON
    ldi r17,0b11000000
    out portd,r17
    rcall LCDsetupOFF
    rcall czekaj
    ret
    ;-----czyszczenie----
    czyszczenie:
    rcall LCDsetupON
    ldi r17,0b00000001
    out portd,r17
    rcall LCDsetupOFF
    rcall czekaj
    ret
    ;--------------------
    ;lcd rs rw e
    ; / 4 5 6 pin
    ;mega8 rs rw e
    ; / b0 b1 b2 pin
    ;--------------------
    LCDsetupON: ;dla trybu transferu ustawień
    ldi r16,0b00000100 ;RW -0
    out portb,r16 ;RS -0
    ret ;E -1

    LCDsetupOFF:
    ldi r16,0b00000000
    out portb,r16
    ret
    ;--------------------
    ;E 1 - transfer 0 -idle
    ;RW 0 - zapis 1- odczyt
    ;RS 0 - komendy; 1 - dane
    ;--------------------
    LCDdataON: ;dla trybo transferu danych
    ldi r16, 0b00000101 ;RW-0
    out portb,r16 ;RS-1
    ret ;E -1

    LCDdataOFF:
    ldi r16, 0b00000001
    out portb,r16
    ret
    ;------czekaj--------
    czekaj:
    ;ldi r20,$ff
    ; czekaj2:
    ;ldi r21,$ff
    ; czekaj1:
    ; dec r21
    ; brne czekaj1
    ;dec r20
    ;brne czekaj2
    ret
  • Banner Multimetr Fluke 87VBanner Multimetr Fluke 87V
  • Moderator Mikrokontrolery Projektowanie
    Po pierwsze zrezygnuj z assemblera na rzecz C - to co piszesz nie wymaga uzycia tego jezyka, a w C zrobisz to 100x szybciej i wygodniej. Ad meritum - komunikacje po USB mozesz rozwiazac na dwa sposoby - albo dedykowany uklad - np. FT232R, ktory zalatwia sprawe - zalety - latwosc, po stronie procka widzisz to jako RS232, po stronie komputera albo wirtualny port RS232, albo za pomoca stosownej biblioteki (dostarczonej przez producenta) masz dostep do pelnego API. Wady - dodatkowy uklad. Mozesz tez obsluge USB owierzyc procesorowi - sa dostepne programowe biblioteki - nie wymaga to zadnych dodatkowych zachodow, ale musisz przejsc przez te biblioteki i jest to troche partyzantka.
  • Banner Multimetr Fluke 87VBanner Multimetr Fluke 87V
  • Poziom 32  
    Nie słuchaj w asemblerze równie szybko a na dodatek wiecej sie nauczysz.
  • Poziom 24  
    Asm to akurat przymus więc nie mam tu za bardzo manewru. Całkiem sympatycznie wchodzi ale jest mało przykładów przez co trzeba ślęczeć nad pdf-ami .

    FT232R drogi jest ;( , MAX232 2,5 zł nada się?

    Patrzyłem po pdf , nie widziałem tam żadnej procedury obsługi czy coś .
  • Poziom 32  
    Kilkanascie złotych kosztuje przejsciówka z USM na RS a UART masz w procesorze co załatwi ci całą komunikacje oczywiscie od strony mikrokontrolera.
  • Poziom 43  
    MAX232 nie nada się.
  • Poziom 24  
    asembler napisał:
    Kilkanascie złotych kosztuje przejsciówka z USM na RS a UART masz w procesorze co załatwi ci całą komunikacje oczywiscie od strony mikrokontrolera.


    Możesz wskazać źródełko do owej przejściówki ?
  • Poziom 32  
    Na wiadomym portalu wpisz haslo USB-COM widzialem za 8 zł
    A w kazdym sklepie z akcesoriamu komputerowymi powinienes tez znalesc.
  • Poziom 24  
    Zgadza się cena dobra , za taka kasę nie opłaca się samemu grzebać .
    No to teraz zostaje tylko kwestia jak by to wyglądało od strony komputera .

    Przez chwile rozmyślałem nad pakowaniem wyników do pendrive . Jak myślicie będzie coś z tego ?
  • Poziom 32  
    A do czego poczebujesz gromadzic w komputerze wyniki?
    A obsługe pendriva oczywiscie już masz:-)

    Od strony komputera tez by sie jakis program przydal to ze odbierzesz i zapiszesz dane to chyba nie wszsytko?

    Jezeli to ma byc rejestrator napiecia (napiec) to moze zrób wszystko bez komputera PC

    A jezeli juz musi byc komputer PC to juz lepiej na karte pamieci ładowac tylko ze bedziesz potrzebował programu do obsługi plików.
  • Poziom 24  
    Cały myk polega więc na tym by dane były weryfikowalne przez komputer.

    Jedyne co mnie interesuje to zapis napięć . Forma w pliku txt została wybrana bo łatwo z niej importować do innych programów (sporządzenie wykresów itp.).

    Wersja z pen drive wydaje się być najwygodniejsza- gromadzenie wyników bez komputera , karta odpada bo z definicji urządzenie ma wysyłać dane do komputera przez port usb (taki kaprys prowadzącego). Nie powiedział w jak ma wyglądać połączenie dla tego pomyślałem o pendraku - chyba , że prościej będzie to na kablu wykonać.
  • Poziom 32  
    To juz obojetne gdzie bedziesz hromadzil dane jak juz bedziesz mial w komputerze. z tego co piszesz to pena chcesz włozyc do PC
    Wedlug mnie odczytujesz napiecie gromadzisz w dowolnej pamieci eeprom/flash potem podłaczasz do komputera COM-USB i przesyłasz dane. Nie widze tu miejsca na pen driva
  • Poziom 24  
    Żeby to miało ręce i nogi .

    Urządzenie pomiarowe -> pen -> pc

    Lub jak pisałem bezpośrednio do komputera , jedyne co się liczy to wykorzystanie gniazda USB komputera do odbioru danych ;]

    Coś topornie mi idzie woltomierz ;]
  • Poziom 32  
    Urzadzenie pomiarowe pen raczej nie do zrobienia wiec spróbuj urzadzenie pomiaraow USB PC.
  • Poziom 24  
    Coś już kombinuje . Na początek dokończę woltomierz , potem zastanowię się na wysłaniem . Z drugiej strony nie wyobrażam sobie jeszcze jak powinno wyglądać odbieranie danych przez komputer . Chyba bez drobnego programiku w c się nie obejdzie .


    zobacz tu : Link
  • Moderator Mikrokontrolery Projektowanie
    Jesli chcesz zapisywac do pliku txt to wystarczy przekierowac wejscie com do pliku, albo odpalic terminal z zapisem do pliku. Jak dokladnie to zrobic to zalezy od OS, ale kazdy to umozliwia bez napisania chociazby linii kodu.
  • Poziom 24  
    Mam już odczyt w ADCH co z tym dalej zrobić ? Chciałbym uzyskać dokładność 0.01v
  • Poziom 22  
    blantozaur napisał:
    ... Bardziej mnie martwi transmisja danych przez usb do komputera (na razie chciałbym zapisywać pomiary do pliku txt ) ...



    Kup na aukcjach kabel usb np do starego telefonu siemens. Kosztuje 1,99 zł a ma fajną przejściówkę usb-uart. Widziany w kompie jako port COMx.
  • Poziom 43  
    Zapomniałeś napisać ile kosztuje przesyłka z której nie można zrezygnować. Każdy kabel musi przecież być osobno zapakowany i osobno wysłany w trosce o klienta.
  • Poziom 24  
    Kabel już zostawmy w spokoju na razie co innego mnie gnębi .

    Mam już odczyt w ADCH co z tym dalej zrobić ? Chciałbym uzyskać dokładność 0.01v
  • Moderator Mikrokontrolery Projektowanie
  • Poziom 43  
    No to jeszcze musisz zrobić odczyt ADCL.
    I jak połączysz ADCL i ADCH to będziesz miał 10 bitów i te 0,01V raczej osiągnięte. Ale krok napięcia nie będzie dokładnie równy 0,01V.
  • Warunkowo odblokowany
    Pozwolę sobie pociągnąć dalej...

    Wszystko było by łatwiejsze gdybym miał RS232 w laptopie - ale nie mam jak to laptop. Więc jestem zmuszony (chcę) wykorzystać do transmisji danych port USB.

    Tak jak kolega powiedzmy że będzie to woltomierz (niech będzie na razie woltomierz). Pozwolę sobie olać tutaj kwestię jak co z czym aby uzyskać wynik bo to już mam za sobą. Powiedzmy że zapisałem wyniki 20ms pomiaru na dwóch wierszach pamięci.

    Teraz polecę trochę swoją teorią która wynika z nie wiedzy być może ponieważ zajmuje się mikroprocesorami tylko i wyłącznie hobbistycznie. Jest to również tylko i wyłącznie Assembler choć jak masz uwagi jaki mi pomóc - może być C - też sobie z nim poradzę sprowadzając go do ASM...

    Zaczynam. To że sobie napisze programik do kompa który mi z pliku txt wykreśli przebieg na wykresie też jest problemem (lecz jak nie ja to mi kolega pomorze ;) )

    Może założenie najpierw...

    Bierzemy prosty obwód RC szeregowy zasilany 7V AC. Jak każdy wie (bądź też nie) uzyskamy przesunięcie fazowe prądu i napięcia. R = Xc (prawie że) gdzie f = 50Hz. Chodzi o zrobienie pomiarów jednego okresu badanego przebiegu 20ms.

    Pierwsze rozwiązanie jakie mi do głowy przyszło wczoraj. To zapis wyników w pamieci EEPROM oraz zczytanie jej przez programator. Uzyskamy plik hex który jest odpowiednikiem txt (powiedzmy). Więc uzyskamy plik z 16 wierszami gdzie w wierszu mamy 32 komórki z wartościami HEX. czyli powiedzmy że jeden wiersz to będą wartości jednego przebiegu czyli punkty co 0,625ms. Otrzymamy 4 przebiegi (napięcie zasilania, napiecie C, napięcie R, prąd).

    Ale to mnie nie zadawala... chciałbym to zrobić na transmisji. Byłem pewny że mam RS w lapku a tu zonk... Dwa jakieś wyjścia obrazu... Tak wiec tylko USB mi zostaje. Chciałbym po prostu dane z eeprom przesłać do komputera...

    I tu schody:
    -jaki program do obsługi tego przesyłania
    -słyszałem ze jak atmega8 ma z kompem pracować to kwarc co najmniej 12MHz
    -czy ten mój pomysł ma prawo działać

    Mile widziane jakieś podpowiedzi jaki program wybrać (prostota obsługi najlepiej PL), jakieś wskazówki co do układu transmisji USB lub jak to wykonać bezpośrednio atmega8
  • VIP Zasłużony dla elektroda
    1. po co EEPROM w to mieszać, jak wystarczy buforowanie w RAM ?
    2. Osobiście sprawdza u mnie się przejściówka na układzie PL2303 kupiona za pośrednictwem znanego serwisu aukcyjnego.
    3. Co do programu, to wystarczy byle jaki terminalowy z opcją logowania. U mnie na linuksie sprawdza się cutecom zainspirowany funkcjonalnością programu Bray++, którego google jeszcze pamiętają, ale trudno dorwać na pierwszy rzut oka.