Skocz do zawartości

[Bascom] ATmega32 - karta sd lcd z 6100 i atmegą32 w bascomie


zuba1

Pomocna odpowiedź

Witam.Ponieważ nikt nie odpowiedział mi na elektrodzie 😥 pytam się tu.Piszę soft który ma na celu obsługę kart SD i LCD od 6100.Samą obsługę LCD opanowałem (na atmedze8) jednak nie wiem czy SD będzie działać.Jako kartę wykorzystam m2 1gb (została po starym telefonie).Jak na razie nie mam dostępu do atmegi bo właśnie co ją spaliłem jednak pytam się o poprawność softu.Jak widać w sofcie brakuje jeszcze odczytywania plików txt (jeśli ktoś wie jak to zrobić to niech pisze :-> ).Czy ten program ma szanse na skomunikowanie się z kartą a jeśli nie to proszę o pomoc.Sensowne odpowiedzi będą nagradzane piwami 😉 .

$regfile = "m32def.dat"
$crystal = 8000000                                          '8 MHz internal oscillator
$hwstack = 128
$swstack = 128
$framesize = 128
$baud = 9600
$include "CONFIG_AVR-DOS.Bas"
$lib "Lcd-pcf8833.lbx "

'*****************************************************************************************

Config Pind.2 = Input
Config Pind.3 = Input
Config Pind.4 = Input

Sw1 Alias Pind.2
Sw2 Alias Pind.4
Sw3 Alias Pind.3

Set Pind.2
Set Pind.3
Set Pind.4

'***************************************************************************************

Config Graphlcd = Color , Controlport = Portc , Cs = 4 , Rs = 5 , Scl = 2 , Sda = 3

Setfont Color8x8

Const Blue = &B00000011
Const Yellow = &B11111100
Const Red = &B11100000
Const Green = &B00011100
Const Black = &B00000000
Const White = &B11111111
Const Brightgreen = &B00111110
Const Darkgreen = &B00010100
Const Darkred = &B10100000
Const Darkblue = &B00000010
Const Brightblue = &B00011111
Const Orange = &B11111000


Glcdcmd &H20
Glcdcmd &H48                                                'adres kontrastu
Glcddata 80                                                 'kontrast

Box(1 , 1) -(132 , 132) , White
Cls


Dim Sek As Byte
Dim Mint As Byte
Dim Godz As Byte

Config Timer1 = Timer , Prescale = 256
Enable Interrupts
Enable Timer1
Timer1 = 32000
On Timer1 Czas:
Start Timer1

'*************************************************************************************
Dim Dod1 As Byte
Dim Dod2 As Byte
Dim Wynik1 As Word
Dim Wynik2 As Word

Dim Uart As Word

Dim Tryb As Byte

Dim Wartosc1 As Word

'*****************************************************************************************
Set Portc.6
$lib "MMC.LIB"                                              ' link driver library
$external _mmc
Cls
Const Cmmc_soft = 0                                         'SPI HARDWARE
' define Chip-Select Pin
Config Pinb.4 = Output                                      ' define here Pin for CS of MMC/SD Card
Mmc_cs Alias Portb.4
Set Mmc_cs
' HW-SPI is configured to highest Speed
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1       'Config Spi = Soft , Din = Pinb.3 , Dout = Portb.2 , Ss = Portb.0 , Clock = Portb.1



Spiinit                                                     ' Init SPI

Const Cperrdrivereset = 225                                 ' Error response Byte at Reset command
Const Cperrdriveinit = 226                                  ' Error response Byte at Init Command
Const Cperrdrivereadcommand = 227                           ' Error response Byte at Read Command
Const Cperrdrivewritecommand = 228                          ' Error response Byte at Write Command
Const Cperrdrivereadresponse = 229                          ' No Data response Byte from MMC at Read
Const Cperrdrivewriteresponse = 230                         ' No Data response Byte from MMC at Write
Const Cperrdrive = 231
Const Cperrdrivenotsupported = 232                          ' return code for DriveGetIdentity, not supported yet
Waitms 700
Dim A2 As Byte
Dim Gbdriveerror As Byte                                    ' General Driver Error register
Dim Gbdriveerrorreg As Byte                                 ' Driver load Error-Register of HD in case of error
Dim Gbdrivestatusreg As Byte                                ' Driver load Status-Register of HD on case of error
Dim Gbdrivedebug As Byte
Dim B As Word
Dim C As Word
Gbdriveerror = Driveinit()
B = Initfilesystem(1)
C = Drivecheck()
Cls
Gosub Logowanie
'***************************************************************************************
Logowanie:
Do


  Lcdat 1 , 1 , "       MPU" , Brightblue , Black
  Lcdat 9 , 1 , "ustaw zegar" , White , Black
  Lcdat 25 , 1 , "sekundy" ; Sek ; "" , Brightgreen , Black
  Lcdat 49 , 1 , "s1 minuty " ; Mint ; "" , Yellow , Black
  Lcdat 73 , 1 , "s2 godziny" ; Godz ; "" , Orange , Black
  Lcdat 121 , 1 , "by zuba1 2012R." , Red , Black




If Sw1 = 1 Then
Waitms 100
Incr Mint
End If


If Sw2 = 1 Then
Waitms 100
Incr Godz
End If

If Sw3 = 1 Then
Waitms 100
Cls
Gosub Zegarek
End If

Loop

End

'***************************************************************************

Zegarek:
Setfont Color16x16
Do


  Lcdat 50 , 1 , "" ; Godz ; ":" ; Mint ; ":" ; Sek , White , Black


If Sw3 = 1 Then
Waitms 400
Cls
Gosub Menu
End If

Loop

End

'*****************************************************************************
Menu:
Tryb = 1
Setfont Color8x8
Do
If Tryb > 6 Then Tryb = 1

  Lcdat 1 , 1 , "  MPU MENU" , White , Black
  Lcdat 9 , 1 , "1.dane" , White , Black
  Lcdat 17 , 1 , "2.karkulator" , White , Black
  Lcdat 25 , 1 , "3.terminal RS232" , White , Black
  Lcdat 33 , 1 , "4.oscyloskop" , White , Black
  Lcdat 41 , 1 , "5.reset" , White , Black
  Lcdat 49 , 1 , "6.info" , White , Black
  Lcdat 73 , 1 , "  " ; Tryb , White , Black

If Sw1 = 1 Then
Waitms 100
Incr Tryb
End If

If Sw2 = 1 And Tryb = 1 Then
Waitms 60
Gosub Dane
End If

If Sw2 = 1 And Tryb = 2 Then
Waitms 60
Gosub Karkulator
End If

If Sw2 = 1 And Tryb = 3 Then
Waitms 60
Gosub Terminal
End If

If Sw2 = 1 And Tryb = 4 Then
Waitms 60
Gosub Oscyloskop
End If

If Sw2 = 1 And Tryb = 5 Then
Waitms 60
Gosub Resetuc
End If

If Sw2 = 1 And Tryb = 6 Then
Waitms 60
Gosub Info
End If


If Sw3 = 1 Then
Waitms 500
Cls
Gosub Zegarek
End If



Loop
End
'*****************************************************************************
Dane:
Cls
Do


'tu chce zrobić całą obsługę tekstów oraz ich wyświetlanie









If Sw3 = 1 Then
Waitms 60
Cls
Gosub Zegarek
End If

Loop
End

'****************************************************************************
Karkulator:
Dod1 = 0
Dod2 = 0

Do

  Lcdat 1 , 1 , "MPU karkulator" , Orange , Black
  Lcdat 41 , 1 , "" ; Dod1 ; "*" ; Dod2 ; "=" ; Wynik1 , White , Black
  Lcdat 57 , 1 , "" ; Dod1 ; "+" ; Dod2 ; "=" ; Wynik2 , White , Black


Wynik1 = Dod1 * Dod2
Wynik2 = Dod1 + Dod2

If Sw1 = 1 Then
Waitms 60
Incr Dod1
End If

If Sw2 = 1 Then
Waitms 60
Incr Dod2
End If

If Sw3 = 1 Then
Waitms 60
Cls
Gosub Zegarek
End If

Loop
End

'****************************************************************************

Terminal:
Do

Uart = Inkey()


  Lcdat 1 , 1 , "    MPU terminal" , Orange , Black
  Lcdat 41 , 1 , "send data->uart" , White , Black
  Lcdat 73 , 1 , "" ; Chr(uart) , White , Black


If Sw3 = 1 Then
Waitms 60
Cls
Gosub Zegarek
End If

Loop
End

'****************************************************************************

Oscyloskop:
Do

Pulsein Wartosc1 , Pinb , 0 , 1                             'detekcja zmiany stanu z 1 na 0



  Lcdat 1 , 1 , "   MPU oscyloskop" , Orange , Black
  Lcdat 41 , 1 , "pomiar robisz w Hz" , White , Black
  Lcdat 73 , 1 , "      " ; Wartosc1 , White , Black


If Sw3 = 1 Then
Waitms 60
Cls
Gosub Zegarek
End If

Loop
End

'****************************************************************************

Resetuc:
Config Watchdog = 1024
Start Watchdog
Do
  Lcdat 10 , 1 , "reset za 1s" , Orange , Black
                                    'reset wystąpi po 1 sekundzie
Loop
End

'****************************************************************************


Info:
B = Initfilesystem(1)
C = Drivecheck()

Do

Lcdat 10 , 1 , "Init - " ; B , Black , White
Lcdat 20 , 1 , "Stan - " ; C , Black , White
Lcdat , 30 , 1 , "Spraw. - " ; Gbdriveerror , Black , White
Lcdat , 40 , 1 , "Rozmiar - " ; Disksize() , Black , White
Lcdat , 50 , 1 , "wolne - " ; Diskfree() , Black , White
Lcdat , 60 , 1 , "HARDWARE M32" , Black , White
Lcdat , 70 , 1 , "SOFTWARE BASCOM" , Black , White

If Sw3 = 1 Then
Waitms 500
Cls
Gosub Zegarek
End If

Loop
End


'****************************************************************************

Czas:
Timer1 = 32000
Incr Sek
Cls
If Sek = 60 Then
Sek = 0
Incr Mint
End If

If Mint = 60 Then
Mint = 0
Incr Godz
End If

If Godz = 24 Then
Godz = 0
End If
Return


'************************************************************************


$include "color8x8.font"
$include "color16x16.font"
Link do komentarza
Share on other sites

Ja też przyłączam się do prośby. jakby ktoś napisał krok po kroku jak odczytywać AVR-ką z pliku txt, a jeszcze lepiej jak zapisywać - byłbym wdzięczny.

Pomyślmy jakby ruszyło to polską robotykę do przodu - nie trzeba za każdym razem programować uc, tylko odczytujemy kartę z logami i wiemy co poszło nie tak. Przy lf-ach wystarczyło by dać kartę z nowymi wartościami żeby poprawić skręty itp.

Taki artykuł na pewno by zapulsował a przecież jest konkurs wakacyjny 🙂

Link do komentarza
Share on other sites

Z zapisywaniem i tworzeniem pliku niema kłopotu jak chcesz to masz niestety dopóki nie będę miał proca nie będę wiedział czy soft zadziała robisz to tak:

Open "test.txt" For Append As #2 'na karcie robisz plik o tej nazwie
  Write #2 , "jakiś wpis" 'tu wpisujesz co ma dać czy zmienną czy co
  Flush #2
  Close #2 

To umiem zrobić gorzej z otwieraniem.

Link do komentarza
Share on other sites

Nigdy tego nie ruszałem w BASCOM, ale plik chyba najpierw trzeba otworzyć, a potem tylko czytać bajt po bajcie,aż nie dojedzie się tzw. FEOF, czyli znacznika końca pliku, bo zwykły TXT, nie na chyba nawet nagłówka.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Z tego co rozumiem to kolega chce obsłużyć kartę M2 ??? Ja wiem że uSD to tak bo działa w trybie SPI ale żeby M2 to pierwsze słyszę.Dla mnie SD czy uSD a M2 to różnica także proszę o jasne określenie bo w 1 poście są wymienione obie.

Link do komentarza
Share on other sites

Przepraszam że wprowadziłem w błąd bo chcę obsłużyć mikro SD.Co do obsługi czy soft ma szanse na połączenie się z kartą???

[ Dodano: 18-07-2012, 16:46 ]

kamil-s, Zaklepuje temat bo wiem już jak to odczytać.Dowiesz się za ok 2 tygodnie gdy napisze artykuł.Zdobyłem atmegę i lekko trzeba było przerobić kod ale wszystko działa.Pozdrawiam i temat zamykam.

Link do komentarza
Share on other sites

Fajnie, tylko że jeden artykuł to trochę mało, moim zdaniem aby poruszanie tematu zapisu i odczytu plików, oraz obsługi kart SD/MMC miało sens, należałoby opisać to w kontekście tworzenia RTOSów, inaczej może to być wyrwane trochę z kontekstu.

Link do komentarza
Share on other sites

jeśli chcesz mogę potem podrzucić fragment konfiguracji jej i odczytywanie pliku txt

Jeśli masz to daj na pewno się przyda. 😃

Link do komentarza
Share on other sites

Konfiguracja karty

'
'Connection as following
'MMC    M128/M103           M32
'1      MMC_CS PORTB.0      MMC_CS PORTB.4
'2      MOSI PORTB.2        MOSI PORTB.5
'3      GND                 GND
'4      +3.3V               +3.3V
'5      CLOCK PORTB.1       CLOCK PORTB.7
'6      GND                 GND
'7      MISO, PORTB.3       MISO, PORTB.6

' you can vary MMC_CS on HW-SPI and all pins on SOFT-SPI, check settings
' ========== Start of user definable range =====================================

' you can use HW-SPI of the AVR (recommended) or a driver build in Soft-SPI, if
' the HW-SPI of the AVR is occupied by an other SPI-Device with different settings

' Declare here you SPI-Mode
' using HW-SPI:     cMMC_Soft = 0
' not using HW_SPI: cMMC_Soft = 1

Const Cmmc_soft = 0

#if Cmmc_soft = 0

' --------- Start of Section for HW-SPI ----------------------------------------


  ' define Chip-Select Pin
  Config Pinb.4 = Output                                   ' define here Pin for CS of MMC/SD Card
  Mmc_cs Alias Portb.4
  Set Mmc_cs

  ' Define here SS Pin of HW-SPI of the CPU (f.e. Pinb.0 on M128)
  'Config Pinb.4 = Output                                   ' define here Pin of SPI SS
  'Spi_ss Alias Portb.4
  'Set Spi_ss                                               ' Set SPI-SS to Output and High por Proper work of
                                                 ' SPI as Master

  ' HW-SPI is configured to highest Speed
  Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1
  Spsr = 1                                                 ' Double speed on ATMega128 default = commented changed by author
  Spiinit                                                  ' Init SPI

' --------- End of Section for HW-SPI ------------------------------------------

#else                                                       ' Config here SPI pins, if not using HW SPI

' --------- Start of Section for Soft-SPI --------------------------------------

  ' Chip Select Pin  => Pin 1 of MMC/SD
  Config Pinb.4 = Output
  Mmc_cs Alias Portb.4
  Set Mmc_cs

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

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

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

' --------- End of Section for Soft-SPI ----------------------------------------

#endif

' ========== End of user definable range =======================================


' Error
Const Cperrdrivereset = 225                                 ' Error response Byte at Reset command
Const Cperrdriveinit = 226                                  ' Error response Byte at Init Command
Const Cperrdrivereadcommand = 227                           ' Error response Byte at Read Command
Const Cperrdrivewritecommand = 228                          ' Error response Byte at Write Command
Const Cperrdrivereadresponse = 229                          ' No Data response Byte from MMC at Read
Const Cperrdrivewriteresponse = 230                         ' No Data response Byte from MMC at Write
Const Cperrdrive = 231
Const Cperrdrivenotsupported = 232                          ' return code for DriveGetIdentity, not supported yet

Waitms 1                                                    ' Wait some time before initialising MMC/SD
Dim Gbdriveerror As Byte                                    ' General Driver Error register
Dim Gbdriveerrorreg As Byte                                 ' Driver load Error-Register of HD in case of error
Dim Gbdrivestatusreg As Byte                                ' Driver load Status-Register of HD on case of error
Dim Gbdrivedebug As Byte
$lib "MMC.LIB"                                              ' link driver library
$external _mmc
Gbdriveerror = Driveinit()                                  ' Init MMC/SD Card

Konfiguracja avr dos

Const Cfilehandles = 1                                      ' [default = 2] changed for mega32
Const Csepfathandle = 0                                     ' [default = 1] changed fom mega32
Const Cfatdirsaveatend = 1
Const Ctextquotationmarks = 1
Const Cfatsecondupdate = 1                                  ' [default = 1]
Const Cvariableseparator = 9

i otwieranie pliku

Sub Otworz
Local Txt As String * 84
Local Ost As Long

Open Plik_txt For Binary As #1

Ost = 1
Get #1 , Txt , 1 , 84
Lcdclear
Lcdgoxy 1 , 1
Lcdstr Txt , 1 , 0
Lcdupdate

tu są resztki mojego kodu ale powinieneś dać radę 😋

Jak czegoś nie rozumiesz zaglądnij do polskiego helpa

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.