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

MMC, AVR-DOS i BASCOM. Układ nie reaguje na odczyt/zapis karty MMC.

17 Mar 2005 17:35 3677 1
  • Poziom 14  
    Witam, mam procesor ATMEGA128 16AI zasilany z 5V i podłaczony do niego LCD i MMC zasilane 3.3V. Magistarla SPI została do nich podpięta przez rezystory poza klinią DO (data out karty MMC). Po włczeniu układ nie reaguje na odczyt zapis do karty MMC, może 3,3V z DO mmc nie jest rozróżniany przez AVRa jako stan wysoki? Wyświetlacz LCD działą dobrze i ma odzielne rezystory do SPI. Do sterowania kartą MMC użyłem biblioteki MMC.LIB z AVR-DOS.

    Jeśli ktoś prubował użyć AVR-DOSA lub innych bibliotekl wstawek ASM w BAscomie to proszę o jakieś wskazówki bo mędzie sie z tą MMC drugi dzień.

    Kod programu do testowania karty który nie działa:

    Code:

    Mmccs Alias Portb.6
    Mmccs_pin Alias Pinb.6
    Lcdres Alias Portb.5
    Lcdcs Alias Portb.4
    Mosix Alias Portb.2
    Misox Alias Portb.3
    Sckx Alias Portb.1

    $regfile "m128def.dat"                                      'ATMEGA128 16AI
    $lib "MMC.LIB"                                              'biblioteka AVR-DOS
    $crystal = 16000000                                         'kwarc 16MHz
    Config Porte = Input : Config Portb = Output : Config Portb.3 = Input       'ustaw ddr
    Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1
    Spsr = 1                                                    'double speed
    Spiinit                                                     'SPCR=92
    Waitms 1


    Config Mmccs_pin = Output                                   'konfiguracja potrzebna dla MMC.LIB
    Cs Alias Portb.6
    _mmcp_cs Alias Portb
    _mmc_cs Alias 0
    Set Mmccs
    Set Lcdcs

    Dim Gbdriveerror As Byte
    Dim Gbdriveerrorreg As Byte
    Dim Gbdrivestatusreg As Byte

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

    Lcdres = 0                                                  'reset LCD
    Waitms 5
    Lcdres = 1
    Lcdcs = 1                                                   'wyłącz sterownik LCD


    Berror = Drivereset()                                       'inicjalizacja MMC
    Berror = Driveinit()

    Waitms 100


    For Lsectornumber = 0 To 512                                'zapisz przypadkowe dane do buforu
    Abuffer(lsectornumber) = Rnd(255)
    Next Lsectornumber

    Wsrampointer = Varptr(abuffer(1))

    Lsectornumber = 3

    Berror = Drivewritesector(wsrampointer , Lsectornumber)     'zapis na karte

    For Lsectornumber = 0 To 512                                'wyczyść bufor
    Abuffer(lsectornumber) = 0
    Next Lsectornumber

    Lsectornumber = 3
    Berror = Drivereadsector(wsrampointer , Lsectornumber)      'odczyt danych z karty



    DALSZA CZĘŚĆ PROGRAMU KTÓRA WYŚWIETLA ZCZY^TANY BLOK NA WYŚWIETLACZU LCD
  • Poziom 27  
    Ja dałem między kartą a prockiem konwerter poziomów napięć (opis był przy okazji sterowania wyświetlacza lcd z noki w ep i jest na elektrodzie).