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

atmega16, bascom, konfiguracja i zapis na karte sd

07 Lip 2009 20:24 5502 7
  • Poziom 9  
    Wiem, że temat kart sd do atmegi był już poruszany ale nie znalazłem odpowiedzi i dalej tkwię w problemie.

    Otóż napisałem program odczytujący pomiar i teraz chcę wysłać ten odczyt na kartę sd, skonfigurowałem ją wg opisu znalezionego
    Code:
    ' Chip Select Pin  => Pin 1 of MMC/SD
    
       Config Pinb.3 = Output
       Mmc_cs Alias Portb.3
       Set Mmc_cs

       ' MOSI - Pin  => Pin 2 of MMC/SD
       Config Pinb.5 = Output
       Set Pinb.5
       Mmc_portmosi Alias Portb
       Bmmc_mosi Alias 2

       ' MISO - Pin  => Pin 7 of MMC/SD
       Config Pinb.6 = Input
       Mmc_portmiso Alias Pinb
       Bmmc_miso Alias 3

       ' SCK - Pin  => Pin 1 of MMC/SD
       Config Pinb.7 = Output
       Set Pinb.7
       Mmc_portsck Alias Portb
       Bmmc_sck Alias 1


    Na moim zestawie uruchomieniowym wyjścia do karty podpisane sa tak:
    DATA0, CLK, DI, DAT3.
    Nie iwem czy dobrze to podłączyłem:
    data0- MOSI
    clk- jako sck
    DI- MISO
    DAT3- mmc/cs

    I dalej wprowadziłem w konfiguracji programu biblioteki:
    $lib "mmc.lib"
    $lib "avr-dos.lib"

    I czy teraz normalnie tak jak wysyłam wynik pomiaru na LCD mam wysłać wynik na kartę sd?? czy musze ją jakoś przerobić na fat?? Jak dalej postąpić krok po kroku.

    Chciałbym uzyskać w miarę opisowe odpowiedzi gdyż spędziłem na googlach kilka dni i znam już większość zagranicznych stron na podstawie których nie mogę rozwiązać problemu.

    Podsumowując: Atmega16, bascom, karta SD, zestaw startowyEvB4.3[/code]


    Po kolejnych analizach udało mi się podłaczyć kartę sd do atmegi:
    Sposób myślenia był dobry a piny to:
    data0- MISO
    clk- jako sck
    DI- MOSI
    DAT3- mmc/cs

    Niestety co do zapisu w formie fat 32 to już nie mam miejsca na atmedze, widocznie atmega16 jest za mała. Mam więc pytanie jak zapisać jakies dane bezpośrednio na karte sd, potem np. po zapełnieniu karty, po przez rs232 przesłać do komputera PC i tam zapisac do pliku .txt??
  • Poziom 9  
    Widze ze brak jakiejkolwiek odpowiedzi, no ale może teraz się ktoś zlituje i coś podpowie.

    Doszedłem do takiego stanu programu:
    Code:

    $regfile = "m32def.dat"
    $crystal = 16000000
    $include "Config_MMC.bas"
    $include "CONFIG_AVR-DOS.Bas"


     Config Lcdpin = Pin , Db4 = Pa.4 , Db5 = Pa.5 , Db6 = Pa.6 , Db7 = Pa.7 , E = Pa.3 , Rs = Pa.2
     Config Lcd = 16 * 2

    Dim Hhh As Byte
    Cls
    Lcd "sprawdzam karte ... "
    Wait 1


    If Drivecheck() = 0 Then
    Hhh = Driveinit()

    Lowerline
    Lcd "karta "
    Lcd Hhh
    Wait 2                                                      'Hhh=225

    Dim Berror As Byte
    Dim Abuffer(512) As Byte
    Dim Wsrampointer As Word
    Dim Lsectornumber As Long

    Wsrampointer = Varptr(abuffer(1))

    Berror = Drivegetidentity(wsrampointer)

       Cls : Lcd "OK  " ; Berror : Wait 2                       'Berror=232

    Else

     Cls : Lcd "Brak karty" : Wait 5
        End

    End If

    Config Date = Dmy , Separator = .
    Config Clock = User
    Enable Interrupts



    'zapisa na kartę

    Open "Temper.txt" For Append As #2
       Write #2 , "zapis jakis tam"                             
       Flush #2
       Close #2

    Lcd "zapis zakonczony"
    Waitms 100


    Jednakże wszędzie w przykładach jest config clock=soft, ja jednak posiadam płytkę z kwarcem 16MHz i muszę użyć ustawienia user. Jednak nie wiem jak to zrobić.
    Dodam że mam do dyspozycji pcf 8583 i ten zegar chciałbym jakoś skonfigurować po i2c, ale jak to napisać w bascomie??
  • Poziom 38  
    Zegar systemowy jest niezbędny do poprawnej pracy systemu AVR-DOS. Nie widzę przeszkód by użyć polecenia CONFIG CLOCK=SOFT i nieistotne jest, że masz kwarc 16MHz. Rezonator zegarkowy (32,768kHz) podpina się osbono pod TOSC1 i TOSC2.
  • Poziom 9  
    Acha, czyli kwarc który mam podpięty pod wejścia Xtal1 Xtal2 będzie taktował ogólnie program, a zegar będzie taktowany z osobnego kwarcu zegarowego i nie będzie konfliktu??
  • Poziom 27  
    Ja się kolego zlituję i co nieco podpowiem. AtMega ma za mało RAM i Flasha aby pomieści program do obługi FAT32 a nawet i FAT16. Poszukaj tu dobrze a doszukasz się podstawowej informacji ze na karcie SD zapisuje się całe bloki po 512 B. Tu masz w zasadzie gotowca jak to zrobić Link. Co gorsza ten link występuje na forum w dzięsiątkach a może i setkach miejsc wystarczy tylko poczytać.
    Wracając do sprawy to możesz co najwyżej zapisywac dane po 512 B i je odczytywac oraz transmitowac po rs232. Karty tak egzotycznie zapisanej w PC-cie nie odczytasz bo nie będzie na niej żadnego systemu plików wiec PC będzie ja widział jako niesformatowaną. Osobiście względem w.w linku mam zatrzeżenie tej natury ze dopasowuje się do poziomów napięć dla karty MMC poprzez dzielniki rezystorowe. Moim zdaniem pewniejsze są bufory z serii LV TTL. :)
  • Poziom 33  
    rpal napisał:
    Ja się kolego zlituję i co nieco podpowiem. AtMega ma za mało RAM i Flasha aby pomieści program do obługi FAT32 a nawet i FAT16.


    jak dobrze poszukasz to implementacje Fat32 znajdziesz na Atmega8 :)
    "I niemożliwe stało sie możliwe ..... " ;)
  • Poziom 9  
    No widać można zdziałać rzeczy niemożliwe gdyż mój u mnie dane są zapisywane na kartę SD, na Atmedze 32.

    A dla kolegi który się zlitował program:
    Code:

    Config Date = Dmy , Separator = /
    Config Clock = Soft
    Enable Interrupts

    Time$ = "15:00:00" : Date$ = "02.01.09"


    Dim Gbtemp1 As Byte                                         ' scratch byte
    Gbtemp1 = Initfilesystem(1)                                 ' we must init the filesystem once
    If Gbtemp1 > 0 Then
     Cls
     Lcd "Error " ; Gbtemp1
     End
    Else
     Cls
     Lcd " OK"


     Cls
     Lcd "Disksize : " ; Disksize()                             ' show disk size in bytes
     Lowerline
     Lcd "Disk free: " ; Diskfree()                             ' show free space too
    End If
    Wait 3


    Open "test.txt" For Append As #2
       Write #2 , "jakiś wpis"
       Flush #2
       Close #2


    Zapraszam do przetestowania.


    rpal napisał:
    Tu masz w zasadzie gotowca jak to zrobić Link. Co gorsza ten link występuje na forum w dzięsiątkach a może i setkach miejsc wystarczy tylko poczytać.

    Szkoda tylko że pod tym linkiem jest kod zupełnie nie pasujący do bascoma. Znam ten link na pamięć i tysiące innych. Lecz nigdzie się nie doszukałem właśnie dwóch rzeczy:
    1. Komendy Config Clock = Soft
    2. potrzeby urzycia kwarcu zegarowego

    Teraz to już wiem.
  • Poziom 27  
    kol. pablo010 przerabiałem sobie ten kod i wywalałem obsługę zegara wpisując stałą wartość. No i istotnie to nie jest do bascoma. Nie używam tego języka i nie posiadam luksusu używania gotowych bibliotek zatem dzięki za kod do analizy ale na nic mi się on zda. Acha nie ja pisałem "czy może się ktoś zlitować" :)