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

Atmega 32 i komunikacja z PC [BASCOM]

adambehnke 25 May 2009 00:23 4355 14
  • #1
    adambehnke
    Level 24  
    Witam

    Mam pewien i jak dla mnie spory problem.Zbudowałem już prawie sterownik do kominka z płaszczem wodnym.Schematy zamieszczę jak ukończę projekt.Mogę w nim ustawiać i sprawdzać temperaturę wkładu,pomieszczeń,położenia zaworów(rozdzielaczy) ,dopuszczać automatycznie ubywającą wodę itp. Całość wyświetlana jest na wyświetlaczach alfanumerycznych. Oczywiście wszystkie parametry są pamiętane w pamięci atmegi , jednak po wyłączeniu i włączeniu zasilania wszystko wraca do ustawień "moich fabrycznych".
    Problemy z jakimi walczę to :

    1. Jak zapisać i w jakiej pamięci dowolne zmienne jak np. Temp01=30,Zaw02=1 .....
    Myślałem nad kartą pamięci SD.Zapisywał bym w niej wartości zmiennych a także "historie" jakąś miesięczną. Ale to nie jest wymagane.

    2. Sytuacja zmusiła mnie do tego aby całość podłączyć także jakoś do komputera PC, i tu mam największy problem.Otóż chciałbym w jakimś programie (pisze programy w visual basic) móc odczytywać informacje o wszystkich parametrach,temperaturach itp ze sterownika ale także móc je konfigurować.Czyli program i sterownik musiały by się komunikować w dwie strony.Wiem że to pewne jest dość proste (komunikowałem się z moich programów z różnymi urządzeniami poprzez LPT) ale na chwilę obecną jest to dla mnie spory problem.


    Jeśli jest może z forumowiczów ktoś kto mógłby mnie naprowadzić jakimiś przykładami na prostą komunikację poprzez LPT lub Com.
    Wprawdzie nie posiadam w komputerze tych portów tylko USB ale doszedłem do wniosku że jak już trzeba będzie to kupię kartę PCI z tymi portami.
    Wszak dla mnie lepiej aby sterownik komunikował się poprzez USB(nawet jakaś emulacja com/lpt przez usb) ,ale to będzie kolejny orzech do zgryzienia.


    Proszę o jakąś pomoc w w/w sprawie.

    Adam
  • #2
    michalko12
    MCUs specialist
    adambehnke wrote:
    Witam

    Oczywiście wszystkie parametry są pamiętane w pamięci atmegi , jednak po wyłączeniu i włączeniu zasilania wszystko wraca do ustawień "moich fabrycznych".
    Problemy z jakimi walczę to :

    1. Jak zapisać i w jakiej pamięci dowolne zmienne jak np. Temp01=30,Zaw02=1 .....
    Myślałem nad kartą pamięci SD.Zapisywał bym w niej wartości zmiennych a także "historie" jakąś miesięczną. Ale to nie jest wymagane.


    Aż wierzyć się nie chce, niby program napisany, wyświetlacze i inne peryferia obsłużone, a datasheet nieprzeczytany????

    Atmega32 ma 1024B EEPROM i do tego ta pamięć służy.
  • #3
    adambehnke
    Level 24  
    No niby tak. Programuję avr-y dopiero od kilku miesięcy i nie wszystko od razu mam "przegryzione".
    Czyli jak zapisać jakąś wartość aby po restarcie sterownika wszystko wróciło na "swoje miejsce" ?
    W programie zapewne będę musiał na początku dodać procedurkę odczytującą dane z eeproma i aktualizować nimi sterownik. Ale jak ??????

    Dodano po 7 [minuty]:

    hehe no fakt:


    Dim V As Eram Byte 'zmienna V będzie umieszczona w EEPROM
    Dim B As Byte 'zmienna będzie w pamięci SRAM

    B = 10
    V = B 'można normalnie korzystać z takich zmiennych
    B = V 'na przykład odczytać zapisana wcześniej daną



    WriteEeprom B , 0 'zapis do pamięci EEPROM
    ReadEeprom B , 0 'odczytanie wartości

    Czyli przyjmijmy powyższą zmienną V , jeśli na samym początku zadeklaruję że V ma być zapisywana w EEprom to podczas pracy jak ta zmienna będzie na bieżąco aktualizowana to będzie automatycznie pamiętana w EEprom ? Dobrze rozumiem?

    Dodano po 23 [minuty]:

    Jesli to co napisałem wyżej działa i ktoś z forumowiczów może to potwierdzić to jeden problem z głowy :)
    Żeby w taki sposób dało się komunikować z kartą SD to by było "bajka"
    Może jakiś ultra prosty i nie skomplikowany sposób ktoś mi przedstawi jak taką komunikację z kartą można przeprowadzić?


    Ale następny mój problem jakim jest komunikacja z PC jest nie mniej dla mnie ważna jak nie najważniejsza.
  • Helpful post
    #4
    d.d
    Level 20  
    NIE wolno robić czegoś takiego żeby zmienna co chwile była zapisywana do EEPROM-u dlatego że on ma określoną ilość zapisów minimum 100.000 / + .
    Ja bym si polecił jakiś SRam na i2C albo SPI z podtrzymaniem bateryjnym może być nawet zegar RTC PCF8583 .
    Co do karty i komunikacji z PC tu LINK masz gotowca na Atmege8 i 32 z obsługą FAT32 i komunikacją przez RS z PC .
  • Helpful post
    #6
    d.d
    Level 20  
    adambehnke wrote:
    ja znam jak na razie tylko Bascom.

    Powinieneś w tytule dodać [Bascom] żeby było wiadomo
    Czytam prawie wszystkie posty jakie się pojawiają w tym dziale i pamiętam że w bascomie jest biblioteka MMC.LIB coś z FAT też było chyba AVRDOS .
    Nigdy nie widziałem polskiego helpa do bascoma ale znawcy twierdzą że tam jest wszystko więc jeśli go nie masz to jest tu LINK
  • #8
    ZbeeGin
    Level 39  
    A do katalogu z przykładami kolega kiedykolwiek zaglądał?
  • Helpful post
    #10
    sebazaz
    Level 14  
    W samym MCS jest przykład: Link.
    Są tam jakieś błędy ale mniej więcej działa.
    Pozdrawiam.
  • #11
    adambehnke
    Level 24  
    O! I to jest chyba to o co mi chodziło. Dzięki. Pokombinuję z tym kodem i napiszę co skleciłem z niego.

    Ale zostaje jeszcze problem komunikacji z kompem.Samo podłączenie wg. schematu to nie problem ale jak to obsłużyć programowo? Jak wysłać jakiś "pakiet" danych do kompa i jak potem taki "pakiet" przesłać z kompa i odebrać w programie atmegi?


    Jako "pakiet" rozumiem coś takiego(oczywiście to tylko przykład) :


    Temperatura1 = 56
    Temperatura2 = 22
    Temperatura3 = 11
    Temperatura4 = 70
    Ustawienie1=01
    Ustawienie2=02
    Ustawienie3=03
    Ustawienie4=04
    Ustawienie5=05
    Ustawienie6=06
    Ustawienie7=07
    Ustawienie8=08

    itd..........

    a pakiet wyglądał by tak: 56,22,11,70,01,02,03,04..........itd.


    Oczywiście w programie atmegi wiedział bym która liczba co przedstawia i to samo w kompie.
    Programik na PC napisał bym w Visual Basic i w tym programie też będę wiedział która liczba z kolei co reprezentuje.Najlepiej aby po przesłaniu do PC taki pakiecik danych zapisywał się jako plik *.txt .

    Proszę o jakieś podpowiedzi jak to można by zrobić.

    Dodano po 22 [minuty]:

    No i mam to:
    Link

    Kontrolka Comm z MCS pozwala wysyłać stosunkowo łatwo dane na porty comm:
    Atmega 32 i komunikacja z PC [BASCOM]

    Ta kontrolka pozwoli mi wysyłać dane z aplikacji w Visual Basic na PC na dowolny port COM. Trzeba tylko jakoś procedurkę w atmedze napisać aby odebrała dane. Ale sęk w tym że nie wiem jak.
  • #14
    11111olo
    Level 42  
    Skorzystaj z instrukcji INKEY( ), WAITKEY , ISCHARWAITING.

    Do                 'jakaś pętelka
      A = Inkey()      'odczytujemy znak
      If A > 0 Then    'czy był jakiś (> 0)?
        Print A        'jeśli tak to piszemy
      End If
    Loop               'to będzie pętelka nieskończona
    
    'Powyższy przykład dotyczy SPRZĘTOWEGO układu UART!
    'Program zapisany jako OPEN.BAS zawiera przykład użycia INKEY()
    'w połączeniu z programowym układem UART.