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 32 i komunikacja z PC [BASCOM]

adambehnke 25 Maj 2009 00:23 4163 14
  • #1 25 Maj 2009 00:23
    adambehnke
    Poziom 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

    0 14
  • #2 25 Maj 2009 00:32
    michalko12
    Specjalista - Mikrokontrolery

    adambehnke napisał:
    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.

    0
  • #3 25 Maj 2009 01:15
    adambehnke
    Poziom 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.

    0
  • Pomocny post
    #4 25 Maj 2009 08:57
    d.d
    Poziom 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 .

    0
  • Pomocny post
    #6 25 Maj 2009 10:49
    d.d
    Poziom 20  

    adambehnke napisał:
    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

    0
  • #8 25 Maj 2009 13:27
    ZbeeGin
    Poziom 38  

    A do katalogu z przykładami kolega kiedykolwiek zaglądał?

    0
  • Pomocny post
    #10 25 Maj 2009 20:46
    sebazaz
    Poziom 13  

    W samym MCS jest przykład: Link.
    Są tam jakieś błędy ale mniej więcej działa.
    Pozdrawiam.

    0
  • #11 25 Maj 2009 22:38
    adambehnke
    Poziom 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.

    0
  • #12 26 Maj 2009 10:25
    pued
    Poziom 10  

    Heelo,

    schematic and software.Mega32

    0
  • #14 26 Maj 2009 21:31
    11111olo
    Poziom 43  

    Skorzystaj z instrukcji INKEY( ), WAITKEY , ISCHARWAITING.

    Code:
    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.

    0