Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Работа с SD картой


Работа с SD картой

Сообщений 1 страница 8 из 8

1

Помогите советом, литературой, исходниками, библиотеками

Нужно с помощью АТМЕГА1284 читать txt.файлы с абсолютно любых SD карт ,потом обрабатывать их Атмегой1284 и снова записывать на SD карту.
txt.файлы это тексты управляющих программ для чпу станка. На атмеге 1284 предполагается делать пульт для чпу станка.

0

2

F1
на их сайте есть примеры
у нас проскальзывали

пример 1

$regfile = "m128def.dat"
$crystal = 7372800                                '8000000

$hwstack = 128
$swstack = 128
$framesize = 128

$baud = 57600

Config Serialin = Buffered , Size = 20
Config Clock = Soft

Enable Interrupts

Config Date = Dmy , Separator = .
Print "Test_Dos_Drive compiled at " ; Version()
$include "Config_MMCSD_HC.bas"

Open "Com1:" As Binary As #1                      ' use #1 for fs_interpreter

Dim Btemp1 As Byte

Print #1 , "Wait for Drive"

If Gbdriveerror = 0 Then

  ' Include AVR-DOS Configuration and library
$include "Config_AVR-DOS.BAS"

  Print #1 , "Init File System ... ";
  Btemp1 = Initfilesystem(1)                      ' Partition 1
                                          ' use 0 for drive without Master boot record
  If Btemp1 <> 0 Then
     Print #1 , "Error: " ; Btemp1 ; " at Init file system"
  Else
     Print #1 , " OK"
     Print #1 , "Filesystem: " ; Gbfilesystem
     Print #1 , "FAT Start Sector: " ; Glfatfirstsector
     Print #1 , "Root Start Sector: " ; Glrootfirstsector
     Print #1 , "Data First Sector: " ; Gldatafirstsector
     Print #1 , "Max. Cluster Nummber: " ; Glmaxclusternumber
     Print #1 , "Sectors per Cluster: " ; Gbsectorspercluster
     Print #1 , "Root Entries: " ; Gwrootentries
     Print #1 , "Sectors per FAT: " ; Glsectorsperfat
     Print #1 , "Number of FATs: " ; Gbnumberoffats
  End If
Else
   Print #1 , "Error during Drive Init: " ; Gbdriveerror
End If

Dim S As String * 10 , W As Word , L As Long

W = 128
L = 1
S = "write"

Open "write.txt" For Output As #2

Write #2 , S , W , L                              ' write is also supported
Flush #2                                          ' flush to disk
Close #2

Open "write.txt" For Input As #2

Input #2 , S , W , L                              ' write is also supported

Close #2

Print S ; " " ; W ; " " ; L

End

' If you want to test with File-System Interpreter uncomment next line
'$include "FS_Interpreter.bas"

пример 2

'-------------------------------------------------------------------------------
'                         MMCSD_Analysis.BAS
'                         Test MMC / SD Card
'-------------------------------------------------------------------------------
' Show the Card Capacity and the Card-Register CSD, CID, OCR and SD_Status
' First you have to init the Card in the File Config_MMCSD_HC.bas with
' $Include "Config_MMCSD_HC.bas"
' All Card registers are written with the MSB first to the Byte-array
' f.E. CSD(1) contains then MSB (Bit 120-127) of the CSD-Register

$regfile = "m128def.dat"
$crystal = 7372800                                '8000000

$hwstack = 128
$swstack = 128
$framesize = 128

$baud = 57600

Config Serialin = Buffered , Size = 20
Config Clock = Soft

Enable Interrupts

Config Date = Dmy , Separator = .

Print "Test_Dos_Drive compiled at " ; Version()

$include "Config_MMCSD_HC.bas"
$include "Config_AVR-DOS.BAS"

Dim Xc As Byte                                    ' for Print - counter
Dim Xd As Byte                                    ' for Print - Counter

Print "Start of Card Analysis"
Print "Last Drive-Error-Code = " ; Gbdriveerror
Print "Gbdrivestatusreg =" ; Gbdrivestatusreg

' Check detected Card Type
Select Case Mmcsd_cardtype
   Case 1
      Print "MMC-Card detected"
   Case 2
      Print "SD-Card Spec. 1.x detected"
   Case 4
      Print "SD-Card Spec. 2.0 detected"
   Case 12
      Print "SD-Card Spec. 2.0 High Capacity detected"
   Case Else
      Print "No Card detected"
End Select

If Mmcsd_cardtype > 0 Then

   ' check the CSD Register

   Dim Csd(16) As Byte
   Print "Get CSD"
   Csd(1) = Mmcsd_getcsd()
   If Gbdriveerror <> 0 Then
      Print "Error at reading CSD"
   Else
      For Xc = 1 To 16
         Print Hex(csd(xc)) ; " " ;
      Next
      Print " "
   End If

   ' Get the Card Capacity from the CSD Register
   Dim Mmcsd_size As Long
   Print "Get Card Capacity [KB]"
   Mmcsd_size = Mmcsd_getsize()
   If Gbdriveerror <> 0 Then
      Print "Error at reading CSD"
   Else
      Print "Card Capacity = " ; Mmcsd_size ; "kb  (1KB=1024 Bytes)"


   End If

   ' Get the CID Register
   Dim Cid(16) As Byte
   Print "Get CID"
   Cid(1) = Mmcsd_getcid()
   If Gbdriveerror <> 0 Then
      Print "Error at reading CID"
   Else
      For Xc = 1 To 16
         Print Hex(cid(xc)) ; " " ;
      Next
      Print " "
   End If

   ' Get the OCR Register

   Dim Ocr(4) As Byte
   Print "Get OCR"
   Ocr(1) = Mmcsd_getocr()
   If Gbdriveerror <> 0 Then
      Print "Error at reading OCR"
   Else
      For Xc = 1 To 4
         Print Hex(ocr(xc)) ; " " ;
      Next
      Print " "
   End If

   If Mmcsd_cardtype > 1 Then
      ' Get the SD_Status Register on SD-Cards
      Dim Sd_status(64) As Byte
      Print "Get SD_Status"
      Sd_status(1) = Sd_getsd_status()
      If Gbdriveerror <> 0 Then
         Print "Error at reading SD_Status"
      Else
         For Xc = 1 To 64
            Print Hex(sd_status(xc)) ; " " ;
            Xd = Xc Mod 8
            If Xd = 0 Then
               Print " "
            End If
         Next
      End If
   End If

End If

Print "End of Card Analysis"

Dim Btemp1 As Byte
Print "Init File System ... ";
Btemp1 = Initfilesystem(1)                        ' Partition 1
' use 0 for drive without Master boot record
If Btemp1 <> 0 Then
   Print "Error: " ; Btemp1 ; " at Init file system"
Else
   Print " OK"
   Print "Filesystem: " ; Gbfilesystem
   Print "FAT Start Sector: " ; Glfatfirstsector
   Print "Root Start Sector: " ; Glrootfirstsector
   Print "Data First Sector: " ; Gldatafirstsector
   Print "Max. Cluster Nummber: " ; Glmaxclusternumber
   Print "Sectors per Cluster: " ; Gbsectorspercluster
   Print "Root Entries: " ; Gwrootentries
   Print "Sectors per FAT: " ; Glsectorsperfat
   Print "Number of FATs: " ; Gbnumberoffats
End If

End

работа с wav-файлом и sd-картой

' изменить fuse для откл JTAG !!! иначе PortC не весь будет работать

$regfile = "m128def.dat"                          ' specify the used micro
$crystal = 16000000                               ' used crystal frequency
$baud = 19200                                     ' use baud rate
$baud1 = 19200                                    ' use baud rate
$hwstack = 128                                    ' hardware stack
$swstack = 128                                    ' SW stack
$framesize = 128                                  ' frame space

Dim Mybyte As Byte

Config Porta = Output                             ' Внешний порт Выходы

Config Portb = Output                             ' SD-Карта и свдиг.регистр
Portd = &B_0111_0000                              ' Резисторы pull-up на концевики и кнопки
Pwm_audio Alias Portb.5                           ' Звук, ШИМ, подключен на УНЧ LM386

Config Portc = Output                             ' Дисплей T6963C

Config Portd = Input                              ' 4-бита порта Входы,  Пропадание_Питания и шина 1wire
Portd = &B_0111_0000                              ' Резисторы pull-up на концевики и кнопки

Config Porte = Input                              ' 4-бита порта Входы,
Config Porte.2 = Output                           '   управление шиной 485
Config Porte.3 = Output                           '   подсв. LCD

Config Portg = Output : Portg = 0                 ' шина I2C и управление LCD
Config Scl = Portg.3                              ' I2C      Часы и EEPROM
Config Sda = Portg.4                              ' I2C

Sound Pwm_audio , 250 , 250                       ' пикнем

$include "Config_MMCSD_HC.bas"
$include "Config_AVR-DOS.BAS"

Print "Init File System ... ";
Mybyte = Initfilesystem(1)                        ' Partition 1
' use 0 for drive without Master boot record

If Mybyte <> 0 Then
   Print "Error: " ; Mybyte ; " at Init file system"
Else
   Print " OK"
   Print "Filesystem: " ; Gbfilesystem
   Print "FAT Start Sector: " ; Glfatfirstsector
   Print "Root Start Sector: " ; Glrootfirstsector
   Print "Data First Sector: " ; Gldatafirstsector
   Print "Max. Cluster Nummber: " ; Glmaxclusternumber
   Print "Sectors per Cluster: " ; Gbsectorspercluster
   Print "Root Entries: " ; Gwrootentries
   Print "Sectors per FAT: " ; Glsectorsperfat
   Print "Number of FATs: " ; Gbnumberoffats
End If

Do

   Open "1.wav" For Binary As #9
   Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down

   Do
      Waitus 90                                   ' wav 8000Hz
      Get #9 , Mybyte
      Pwm1a = Mybyte
   Loop Until Eof(#9) <> 0

   Pwm1a = 1
   Seek #9 , Pwm1a
   Config Timer1 = Timer , Prescale = 1 , Compare A Pwm = Disconnect , Clear Timer = 1
   Close #9

   Wait 2

Loop

Отредактировано Александр Д. (2015-01-24 19:34:53)

+1

3

Большое спасибо за примеры, буду изучать.
А есть ли какая-нибудь литература c пояснениями в которой для Bascom очень подробно освещена работа с SD картой?

0

4

вы не поверите, но по F1 - есть всё :)
главное, чтобы Вы сами знали, что такое FAT и понимали работу с файлами

0

5

а можно ссылку на сайт F1 ?
А ещё лучьше ссылку на тот раздел сайта F1 где есть разбор TXT файла на SD карте

0

6

А Вы программу запустите и F1 нажмите и будет Вам сайт.

0

7

Хватит издеваться над человеком ))
По F1 запускается файл помощи. Можно и знак вопроса в программе нажать. Там подробное описание функций

0

8

А кто пробовал открывать файл в папке? Пишу, например, такое имя файла "54VI/54VI01.txt". Файл вроде открывается и закрывается, но при чтении пустые данные!

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Работа с SD картой