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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Аппаратные возможности МК серии STC8H1Kxxx » отладочная плата под STC8H1K28


отладочная плата под STC8H1K28

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

1

Небольшая отладочная плата под STC8H1K28
8 входов с опторазвязкой на PC817,
3 входа Аналоговые, с возможностью применить как цифровые с подтяжкой к + или - питания,
8 выходов на USB2803,
графический ЖКИ ST7920?
4 кнопки 12*12мм,
I2C с DS1307 и 24Lxx,
пищалка,
RS485,
питание 8-30в.

Архив исходников в DipTrace формате
https://transfiles.ru/1r5is

https://forumupload.ru/uploads/0000/25/b8/439/t61576.png

+2

2

опробовал STC8H1K28
ADC весьма приятное, младший бит качается очень редко. Все настройки АЦП по умолчанию.

Код:
$regfile = "8H1K28.DAT"                   ' STC registers list
'$crystal = 5529600                        ' CPU clock frequence '11059200/2= 5529600
$crystal = 11059200                       ' CPU clock frequence

$large                                    '

Dim Temp As Byte , Temp2 As Byte
Dim Temp_w As Word , Adc_dat As Word
Dim Volts As Single

Dim Font_bold As Byte , Invers_font As Byte
Dim Lcd_m As Byte , Lcd_lf As Byte , Lcd_rt As Byte
Dim Glcd_data As Byte , Lcd_cnt As Byte
Dim Lcdstr$ As String * 16
Dim Simvol_1$ As String * 1 , Simvol_2$ As String * 1
Dim Lcd_w1 As Word , Lcd_w2 As Word
Dim Lcdx As Byte , Lcdy As Byte , X_lcd As Byte , Y_lcd As Byte , Lcd_temp As Byte

'---------------------------------------------------------------------------------------
K1 Alias P5.4
K2 Alias P3.0
K3 Alias P3.1
K4 Alias P3.2

'---------------------------------------------------------------------------------------
P0ie = &B1111_0001                        ' 1: Enable digital pins
P0pu = &B0000_0000                        ' 1: pull-up resistor
P0m0 = &B0000_0000 : P0m1 = &B0000_1111   ' pins mode

P1ie = &B11111111                         ' 1: Enable digital pins
P1pu = &B00000000                         ' 1: pull-up resistor
P1m0 = &B00101000 : P1m1 = &B00000000     ' pins mode

P3ie = &B11111111                         ' 1: Enable digital pins
P3pu = &B00000111                         ' 1: pull-up resistor
P3m0 = &B00000000 : P3m1 = &B00000000     ' pins mode

P5ie = &B00010000                         ' 1: Enable digital pins
P5pu = &B00010000                         ' 1: pull-up resistor
P5m0 = &B00000000 : P5m1 = &B00010000     ' pins mode

'-----------------------------------------
' ADC
  Adccfg = &B0010_1111                    '/2/16

'  P_sw2.7 = 1
  Adctim = &B0_01_01010                   ' CSSETUP(0), CSHOLD(01), SMPDUTY(01010)
'  P_sw2.7 = 0

  Adc_contr = &B1_000_1111                ' ADC_Power, Channel=15 Test internal 1.19v


'---------------------------------------------------------------------------------------
'Графический ЖКИ 128*64 с контроллером ST7920
'Подключено последовательной шиной, вывод 15 (Psb) подключить на минус. Вывод 4 на +5в
P_sw1 = &H00                              'Ss/P1.2, Mosi/P1.3, Miso/P1.4, Sclk/P1.5
Spctl = &B1101_00_11                      'Включаем режим хоста Spi, SYSclk/32

' ---  Инициализация ST7920
Waitms 100                                ' обязательно
Glcd_data = &B00110100 : Gosub Lcdcommand       ' EXTENDEN instruction
Glcd_data = &B00110000 : Gosub Lcdcommand       ' GRAGIC display Off
Glcd_data = &B00000110 : Gosub Lcdcommand       ' Entry Mode Set
Glcd_data = &B00001100 : Gosub Lcdcommand       ' Выкл Курсор и мигание символа
Glcd_data = &B00000001 : Gosub Lcdcommand       ' Clear Text Display
Waitms 4
Glcd_data = &B00110100 : Gosub Lcdcommand       ' EXTENDEN instruction
Glcd_data = &B00110110 : Gosub Lcdcommand       ' GRAGIC display On

' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
'Gosub Lcdimgcls                           ' очистка графической памяти ЖКИ
'Lcdstr$ = "ПРИВЕТИК ВСЕМ!" : Y_lcd = 0 : X_lcd = 0 : Gosub Print_lcd
'Lcdstr$ = "ПРОВЕРКА ST-7920" : Y_lcd = 2 : X_lcd = 0 : Font_bold = 1 : Gosub Print_lcd
'Lcdstr$ = "MCU: STC8H1K28" : Y_lcd = 4 : X_lcd = 0 : Font_bold = 1 : Gosub Print_lcd
'Lcdstr$ = "НУ ОЧЕНЬ БЫСТРО!" : Y_lcd = 5 : X_lcd = 0 : Gosub Print_lcd
'Lcdstr$ = "23-07-2024 13:05" : Y_lcd = 6 : X_lcd = 0 : Invers_font = 1 : Gosub Print_lcd
'Lcdstr$ = "РОССИЯ, С.ПОСАД" : Y_lcd = 7 : X_lcd = 0 : Gosub Print_lcd
'Wait 1

Gosub Lcdimgcls                           ' очистка графической памяти ЖКИ


Do

  Lcdstr$ = "K: "
  If K4 = 1 Then Lcdstr$ = Lcdstr$ + "1" Else Lcdstr$ = Lcdstr$ + "0"
  If K3 = 1 Then Lcdstr$ = Lcdstr$ + "1" Else Lcdstr$ = Lcdstr$ + "0"
  If K2 = 1 Then Lcdstr$ = Lcdstr$ + "1" Else Lcdstr$ = Lcdstr$ + "0"
  If K1 = 1 Then Lcdstr$ = Lcdstr$ + "1" Else Lcdstr$ = Lcdstr$ + "0"
  Y_lcd = 2 : X_lcd = 0 : Gosub Print_lcd

  Incr Temp_w
  Lcdstr$ = Str(temp_w)
  Y_lcd = 7 : X_lcd = 0 : Gosub Print_lcd


  Adc_contr = &B1_100_1001                ' ADC_Power,ADC_start, Channel=9 P0.1
'  Adc_contr = &B1_100_1010                ' ADC_Power,ADC_start, Channel=10 P0.2
'  Adc_contr = &B1_100_1011                ' ADC_Power,ADC_start, Channel=11 P0.3

  Bitwait Adc_contr.5 , Reset             ' ADC_Flag

  High(adc_dat) = Adc_res
  Low(adc_dat) = Adc_resl

  Volts = Adc_dat * 0.0267                ' ADC 10 бит, Делитель 10K + 2.2K

  Lcdstr$ = "ADC: " + Str(adc_dat) + " " + Fusing(volts , #.&&) + "V" + "  "
  Y_lcd = 0 : X_lcd = 0 : Gosub Print_lcd

  Waitms 390
Loop




'=========================================================
Spi_send:
  Spstat = &B1100_0000                    'Снимаем флаги
  Spdat = Temp                            'Отправить Данные
  Bitwait Spstat.7 , Set                  ' Ждём окончания передачи
Return


'=========================================================
Lcdcommand:                               ' Записать команду
  Temp = &B11111000                       ' Команда RW=0 RS=0
  Gosub Spi_send

  Temp = Glcd_data
  Temp = Temp And &B11110000              ' Сбросим 4 бита LSB
  Gosub Spi_send

  Temp = Glcd_data
  Shift Temp , Left , 4 : Temp = Temp And &B11110000       ' Сбросим 4 бита LSB
  Gosub Spi_send
Return

'========================================================
Lcdwrite:                                 ' Записать данные
  Temp = &B11111010                       ' данные RW=0 RS=1
  Gosub Spi_send

  Temp = Glcd_data
  Temp = Temp And &B11110000              ' Сбросим 4 бита LSB
  Gosub Spi_send

  Shift Glcd_data , Left , 4              ' Сбросим 4 бита LSB
  Temp = Glcd_data : Temp = Temp And &B11110000       '  младшие 4 бита LSB
  Gosub Spi_send
Return


'======================================================================
Print_lcd:                                ' по вертикали 0-7 симв., по гориз.- 0-7 блоков
' Преобразуем номера позиции в физический адрес памяти ЖКИ

  If Y_lcd > 3 Then                       ' нижняя половина ЖКИ
    X_lcd = X_lcd + 8
    Y_lcd = Y_lcd - 4
  End If
  Lcdx = X_lcd + 128

  Y_lcd = Y_lcd * 8 : Y_lcd = Y_lcd + 128

  Temp2 = Len(lcdstr$)
  For Lcd_cnt = 1 To Temp2
    Simvol_1$ = Mid(lcdstr$ , Lcd_cnt , 1) : Lcd_m = Asc(simvol_1$) -32       ' До "пробела" нет символов
    If Lcd_m > 159 Then Lcd_m = Lcd_m - 101       ' Убрали из таблицы маленькие английские и русские

    Lcd_w1 = Lcd_m * 8                    ' Адрес левого символа

    Incr Lcd_cnt
    Simvol_2$ = Mid(lcdstr$ , Lcd_cnt , 1) : Lcd_m = Asc(simvol_2$) -32
    If Lcd_m > 159 Then Lcd_m = Lcd_m - 101       ' Убрали из таблицы маленькие английские и русские
    Lcd_w2 = Lcd_m * 8                    ' Адрес правого символа

    Lcdy = Y_lcd
    For Lcd_temp = 0 To 7                 '  8 по вертикали
      Lcd_lf = Lookup(lcd_w1 , Shrift_8x8)
      If Font_bold = 1 Then               ' делаем символы жирными - копируем точку правее
        Lcd_m = Lcd_lf : Shift Lcd_m , Right , 1
        Lcd_lf = Lcd_lf Or Lcd_m
      End If
      If Invers_font = 1 Then Lcd_lf = 255 - Lcd_lf       ' Инверсия символа и фона

      Lcd_rt = Lookup(lcd_w2 , Shrift_8x8)
      If Font_bold = 1 Then               ' делаем символы жирными - копируем точку правее
        Lcd_m = Lcd_rt : Shift Lcd_m , Right , 1
        Lcd_rt = Lcd_rt Or Lcd_m
      End If
      If Invers_font = 1 Then Lcd_rt = 255 - Lcd_rt       ' Инверсия символа и фона

      ' левая половина блока - Lf, правая половина блока = Rt
      Glcd_data = Lcdy : Gosub Lcdcommand
      Glcd_data = Lcdx : Gosub Lcdcommand       '   X=16      16 точек по горизонтали

      Glcd_data = Lcd_lf : Gosub Lcdwrite

      If Simvol_2$ <> "" Then
        Glcd_data = Lcd_rt
        Gosub Lcdwrite
      End If

      Incr Lcdy
      Incr Lcd_w1 : Incr Lcd_w2
    Next
    Incr Lcdx

  Next
  Font_bold = 0
  Invers_font = 0
Return


'=========================================================
Lcdimgcls:                                ' --  Очистка графической памяти ST7920  --
  Lcd_m = 0
  For Lcdx = &H80 To &H8F
    For Lcdy = &H80 To &H9F
      Glcd_data = Lcdy : Gosub Lcdcommand
      Glcd_data = Lcdx : Gosub Lcdcommand
      Glcd_data = 0 : Gosub Lcdwrite
      Glcd_data = Lcd_m : Gosub Lcdwrite
    Next
  Next
Return

'=========================================================
$include "font-8x8_big_eng_rus.inc"

0

3

Круть!

0

4

дык, ширпотреб же ))
В чем крутость? )))

0

5

В том, что ламповый басик можно использовать. Видел ещё мк от BYD по схожим ценам. Живучее ядро, да ещё и прокачано хорошо. Это же как можно лампочками замигать но таких частотах!  :crazyfun:  Расширение динамического диапазона яркостей как минимум.

0

6

Посмотрел BF7613BMXX. Ну... Неплохо. Наверное )))
По крайней мере, документация радует. Оценить её полноту не могу ))

0

7

Теперь и не знаю за что зацепиться. Уже на полгода всё расписано. Побуду наблюдающим.

0

8

Запустил МК на 33МГц, сделал очень чувствительный датчик прикосновения через стекло 4мм.
Метод типовой: Измерение времени заряда электрода.

0


Вы здесь » Программирование ATMEL в BASCOM. » Аппаратные возможности МК серии STC8H1Kxxx » отладочная плата под STC8H1K28