Важная информация

User Tag List

Страница 133 из 133 ПерваяПервая ... 129130131132133
Показано с 1,321 по 1,327 из 1327

Тема: Самодельный компьютер на Z80 и не только

  1. #1321
    Member
    Регистрация
    18.01.2010
    Адрес
    Крым
    Сообщений
    132
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    16 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Некоторые сложности перевешиваются удобством. Делается то один раз, а используется всё время. Естественно, это когда интенсивно меняется программа - тут уж сами должны считать что затратнее. Конечно, если есть эмулятор - это, в общем то, излишнее.
    Касательно софтового UART - немножко муторно конечно. Нужно суетиться и считать такты. С 8080 я не делал, делал на Z80 - ну а какая разница? Z80 4мгц - 9600 без проблем, на 8 - 38400, с ухищрениями - 76800, выше не пытался. Это ввод/вывод на терминал - при загрузке же вообще никто не мешает.

  2. #1321
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #1322
    Veteran Аватар для Tronix
    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,933
    Спасибо Благодарностей отдано 
    78
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    115 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Пилю потихоньку прошивку для часиков на 580ВМ80 с TFT-экранчиком. Набросал интерфейс а-ля "я у мамы UX/UI дизайнер". Избавился от чисел с запятой, перевел все на целочисленную арифметику, оптимизировал альфа-бленд. Сделал самую нудную часть, а именно режим установки и изменения даты/времени с кнопок. Три кнопки - кнопка "SET" - попеременно перебирает все изменяемые параметры (часы/минуты/день недели/день/месяц/год), подсвечивая текущий параметр оранжевым:



    И кнопки "плюс" и "минус" - соответственно меняют текущий параметр. Если после нажатия "SET" никакая кнопка не нажимается в течении 5 секунд, то выходит из режима установки. Итого, уже работают: собственно, часы и календарь, режим установки параметров, показывается реальная температура с 1-wire датчика DS18B20. Не сделано - датчик влажности, на экране просто пока статичная надпись 67% (заглушка):



    Когда доделаю влажность, в конце еще хочу график на плитках температуры и влажности прикрутить, что-то по типу как на картинке:



    Но пока не понял еще - то ли сплайнами его рисовать или всякими кривыми Бизье, то ли просто точками. Надо поэкспериментировать с разным набором данных... Сплайнами конечно красиво будет, но что-то я уже начинаю постепенно упираться в размер 32Кб EEPROM'ки. Си конечно всем хорош, кроме как размером бинарников. А целиком на асме я бы погиб такое писать -) Ладно, посмотрим как пойдет.

  4. Эти 3 пользователя(ей) поблагодарили Tronix за это полезное сообщение:

    ALS (09.10.2023), CityAceE (08.10.2023), parallelno (09.10.2023)

  5. #1323
    Member
    Регистрация
    18.01.2010
    Адрес
    Крым
    Сообщений
    132
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    16 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ОК. Зацепили Tronix меня ваши проблемы. Решил собрать UART на безымянном контроллере - минимум проводов. Накидал, только не отладился ешшо.
    Последний раз редактировалось M80; 08.10.2023 в 19:08.

  6. #1324
    Veteran Аватар для Tronix
    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,933
    Спасибо Благодарностей отдано 
    78
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    115 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от M80 Посмотреть сообщение
    Зацепили Tronix меня ваши проблемы.
    Да вроде бы у меня особых проблем нет, ну по крайней мере с этой платой и часиками -)

  7. #1325
    Member
    Регистрация
    18.01.2010
    Адрес
    Крым
    Сообщений
    132
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    16 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну а кто, как не вы, говорили о проблеме 100-разовой перепрошивки 27хх? И я это прекрасно понимаю. Сам такой был.

  8. #1326
    Member
    Регистрация
    18.01.2010
    Адрес
    Крым
    Сообщений
    132
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    16 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Думаю, наиболее просто иметь Ардуино, и подключаться 3-мя концами к схеме на CPU 8080. У меня z80/2 мгц. На 2,5 мгц тоже работает.
    Идея в том, что Ардуино по запросам от CPU выставляет данные с USB-UART. При этом CPU нет необходимости привязываться к временам UART. Скоростью UART можно играться. Думаю, 38400 вполне.
    Код Ардуино очень прост:

    Скрытый текст

    Код:
    // z80 <- Arduino serial  17:27 17.10.2023  OKF
    
    #define NAME              "z80 <- Arduino serial"
    #define VERSION           "0.3"
    #define UART_BAUDRATE     19200
    
    #define WAIT_TIME         0             //debug
    
    //                        GND
    #define	WAIT              2             //PORTD!
    #define	DATA              3
    #define	IOR               4
    
    #define in(x)             DDRD  &= ~(1<<(x))
    #define out(x)            DDRD  |= 1<<(x)
    #define on(x)             PORTD |= 1<<(x)
    #define off(x)            PORTD &= ~(1<<(x))
    #define pin(x)            (PIND & 1<<(x))
    
    #define di()              cli()
    #define BAUD_SETTING      ((F_CPU / 4 / UART_BAUDRATE - 1) / 2)
    #define con_begin()       (UBRR0H = BAUD_SETTING>>8, UBRR0L = BAUD_SETTING, \
                               UCSR0A = 1<<U2X0 | 1<<UDRE0, UCSR0B = 1<<RXEN0)
    #define con_available()   (UCSR0A & 1<<RXC0)
    #define con_read()        UDR0
    
    
    void setup() {
      on(WAIT); out(WAIT);
      con_begin();
      di();
    }
    
    
    // выставим стартовый бит по запросу от CPU
    inline void put_start() {
      while (pin(IOR));                     //ждём IOR
      off(WAIT);                            //тормозим CPU
      off(DATA);
      out(DATA);                            //выставляем старт бит
      _delay_ms(WAIT_TIME);
      on(WAIT);                             //запускаем CPU
      while (!pin(IOR));                    //ождаем снятия IOR
      in(DATA);                             //убираем старт
    }
    
    
    // биты данных по запросу от CPU
    inline void put_data(uint8_t c) {
      while (pin(IOR));
      off(WAIT);
      c & 1 ? on(DATA) : off(DATA);         //выставляем данные аналогично старт
      out(DATA);
      _delay_ms(WAIT_TIME);
      on(WAIT);
      while (!pin(IOR));
      in(DATA);
    }
    
    
    // стоповый бит
    inline void put_stop() {
      while (pin(IOR));
      off(WAIT);
      on(DATA);
      out(DATA);                            //стоп
      on(WAIT);
      while (!pin(IOR));
      in(DATA);
    }
    
    
    void loop() {
      if (con_available()) {
        uint8_t ch = con_read();
        put_start();
        for (uint8_t i = 0; i < 8; i++, ch >>= 1)
          put_data(ch);
      }
      put_stop();
    }
    [свернуть]

    Со стороны CPU:

    Скрытый текст

    Код:
    ; serial from Arduino
    
    PIN	equ	0		;RX_PORT, D7 - data
    
    
    ; wait start bit
    loop1	defl	$
    	in	a,(PIN)		;wait request
    	ld	b,4
    loop	defl	$
    	djnz	loop
    
    	rlca			;d7
    	jr	c,loop1
    
    	ld	b,8		;receive data
    loop	defl	$
    	in	a,(PIN)
    	rlca			;d7
    	rr	c
    	djnz	loop
    
    loop	defl	$
    	in	a,(PIN)		;stop
    	rlca			;d7
    	jr	nc,loop
    
    	call	ConOut
    	jr	loop1
    [свернуть]
    Последний раз редактировалось M80; 18.10.2023 в 08:23.

  9. #1327
    Veteran Аватар для Tronix
    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,933
    Спасибо Благодарностей отдано 
    78
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    115 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Значит, купил я на алишке все-таки датчик давления/влаги типа BME280. По этому случаю в интерфейсе опять появились снизу три плитки, как и было задумано с самого начального начала. Собственно, для температуры, влажности и давления:



    Теперь у меня даже есть две температуры - одна с датчика DS18B20 и вторая с BME280. Решил температуру показывать с DS18B20, так как она поточнее:



    Оказалось, что 32 килобайта EEPROM - это не так уж и много для 8080, си и картинок. В таком виде почти уперся в 30 килобайт. В целом это уже вполне рабочие часы/градусник/показометр, но на разные свисто-перделки места остается маловато. Адресное пространство щаз поделено поровну - 32кб ROM и 32кб RAM. При этом битовое представление шрифтов + иконки занимают 24469 байт, упаковываются алгоритмом типа lz (zx0) в ~13910 байт и стыкуются с кодом. Сам код занимает ~16 кб. Но к нему прибавляется упакованный битмап ~14кб и получаем 30кб которые надо писать во флеху (EEPROM). При старте платы из EEPROM весь этот статичный упакованный массив битмапов распаковывается в RAM и уже код работает с ним. Итого, помимо почти забитого 30кб EEPROM при старте еще и RAM заполняется минимум на 24 кб, без учета стека, глобальных переменных и массивов.

    Варианты развития событий конечно есть:
    1) Забить и оставить примерно все как есть на данный момент. Просто часы/дата/термометр/показометр;
    2) Прицепить сбоку SPI-флешку, куда засунуть все битмапы;
    3) Городить маппер (схему, позволяющую переключаться между различными банками памяти в одинаковом адресном пространстве), две EEPROM по 32к и переключаться между ними; То есть окутывать плату МГТФ-ом, либо разводить новую плату.

    Разумеется, выбран был первый вариант, быгыг -) Тем более начал тут убирать часики в коробку в начале месяца и кокнул экранчик (потрачено):



    Перезаказал экран на али, и вот, спустя пару недель новый экран приехал, и теперь коробка собралась и закрылась:



    Сделал еще краткосрочный предсказатель погоды по алгоритму Замбретти - рисует разные иконки в верхнем левом углу экране (солнечно/пасмурно/дождь/и тд). Особо не тестировал, но вроде чето показывает там...



    Но к этому времени уже откровенно надоело. Поэтому всё, достаточно возни с i8080, вроде наигрался сполна.

    На всякий случай выложил все по данному проекту "как есть" здесь: https://github.com/Tronix286/i8080_clock

    Но особого смысла повторять именно эту плату нет, так как она делалась исключительно под себя с имеющимися у меня прямо в ящике стола деталями. Именно отсюда на плате винегрет из SMD 0402(!), 0603, 0805, QFN, МЛТ резисторы, мосфеты в ТО220 на 180 или больше омпэр (!) и прочий лулз. BGA разве только здесь для кучи не хватает. Не знаю вообщем, это конечно нужно очень сильно кому-то захотеть, что бы такой мозговырвный набор рассыпухи специально закупать для этого проекта... Но в моем телеграм канале просили выложить - я выложил

Страница 133 из 133 ПерваяПервая ... 129130131132133

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)

Похожие темы

  1. Самодельный станок для намотки ТВЗ
    от Ратмир в разделе Творчество
    Ответов: 3
    Последнее: 25.05.2017, 13:32
  2. Самодельный телевизор
    от KALDYH в разделе Творчество
    Ответов: 34
    Последнее: 18.09.2013, 13:09
  3. Самодельный kickstart под ЛУТ :D
    от fan в разделе Amiga
    Ответов: 6
    Последнее: 21.08.2010, 16:18
  4. Лучший самодельный компьютер
    от roxx в разделе Зарубежные компьютеры
    Ответов: 10
    Последнее: 08.12.2007, 22:53
  5. Самодельный принтер
    от Ewgeny7 в разделе Несортированное железо
    Ответов: 3
    Последнее: 07.08.2005, 18:11

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •