logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Konfiguracja ATmega16 i Bascom do zapisu na kartę SD - problem z pinami

pablo010 07 Lip 2009 20:24 5886 7
REKLAMA
  • #1 6750151
    pablo010
    Poziom 10  
    Posty: 20
    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
    ' 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


    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??
  • REKLAMA
  • #2 6823351
    pablo010
    Poziom 10  
    Posty: 20
    Widze ze brak jakiejkolwiek odpowiedzi, no ale może teraz się ktoś zlituje i coś podpowie.

    Doszedłem do takiego stanu programu:
    
    $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??
  • REKLAMA
  • #3 6823756
    ZbeeGin
    Poziom 39  
    Posty: 4319
    Pomógł: 602
    Ocena: 452
    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.
  • #4 6827723
    pablo010
    Poziom 10  
    Posty: 20
    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??
  • REKLAMA
  • #5 6836913
    rpal
    Poziom 27  
    Posty: 1502
    Pomógł: 72
    Ocena: 49
    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. :)
  • REKLAMA
  • #6 6837180
    gothye
    Poziom 33  
    Posty: 2421
    Pomógł: 183
    Ocena: 60
    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 ..... " ;)
  • #7 6839469
    pablo010
    Poziom 10  
    Posty: 20
    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:
    
    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.
  • #8 6839753
    rpal
    Poziom 27  
    Posty: 1502
    Pomógł: 72
    Ocena: 49
    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ć" :)

Podsumowanie tematu

✨ Dyskusja dotyczy problemów z konfiguracją mikrokontrolera ATmega16 i środowiska Bascom do zapisu danych na kartę SD. Autor opisuje konfigurację pinów SPI (MOSI, MISO, SCK, CS) zgodnie z dokumentacją biblioteki MMC, jednak ma wątpliwości co do poprawności podłączenia pinów na swoim zestawie uruchomieniowym, gdzie wyprowadzenia karty SD oznaczone są jako DATA0, CLK, DI, DAT3. Poruszono kwestie konieczności stosowania zegara systemowego dla poprawnej pracy systemu AVR-DOS, z możliwością użycia konfiguracji software’owego zegara (CONFIG CLOCK=SOFT) niezależnie od kwarcu 16 MHz. Wskazano ograniczenia pamięciowe ATmegi16 w kontekście obsługi systemu plików FAT16/FAT32, sugerując zapisywanie danych w blokach 512 bajtów bez systemu plików, co uniemożliwia odczyt takiej karty w komputerze. Zaprezentowano przykładowy kod inicjalizacji systemu plików i zapisu prostego pliku tekstowego na kartę SD, działający na mikrokontrolerze ATmega32. Podkreślono, że do poprawnej obsługi kart SD warto stosować odpowiednie poziomy napięć, np. przez bufory LV TTL zamiast prostych dzielników rezystorowych. W dyskusji pojawiły się także uwagi dotyczące trudności z implementacją obsługi zegara w Bascom oraz brak gotowych bibliotek dla tego języka.
Wygenerowane przez model językowy.
REKLAMA