Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 04.09.2020, 13:49  
j-Roger
Гражданин KAZUS.RU
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 683
Сказал спасибо: 362
Сказали Спасибо 757 раз(а) в 359 сообщении(ях)
j-Roger на пути к лучшему
По умолчанию Re: Динамическая клавиатура.

Сорри за оффтоп..

Нажмите на изображение для увеличения
Название: Galileo_Inquisition_For_Isr.jpg
Просмотров: 0
Размер:	85.5 Кб
ID:	156058

Реклама:
j-Roger вне форума  
Эти 2 пользователя(ей) сказали Спасибо j-Roger за это сообщение:
arty123 (06.02.2021), ForcePoint (04.09.2020)
Непрочитано 04.09.2020, 15:01  
Yarikkasl
Частый гость
 
Регистрация: 11.03.2019
Сообщений: 26
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Yarikkasl на пути к лучшему
По умолчанию Re: Динамическая клавиатура.

Логически то я разобрался, а вот реализация у меня хромает. Буду думать значит.
Yarikkasl вне форума  
Непрочитано 04.09.2020, 16:16  
parovoZZ
Почётный гражданин KAZUS.RU
 
Регистрация: 15.11.2010
Сообщений: 2,378
Сказал спасибо: 338
Сказали Спасибо 328 раз(а) в 253 сообщении(ях)
parovoZZ на пути к лучшему
По умолчанию Re: Динамическая клавиатура.

Могу дать код для MSP430 из набора стандартных примеров.

Нажмите, чтобы открыть спойлер
PHP код:
/                                                 
//           MSP430FR2xxx                          Keypad Matrix
//        -----------------                ›-/ -o  ›-/ -o  ›-/ -o  ›-/ -o
//        |               |                |    |  |    |  |    |  |    |
//     /|\|           P1.0|‹---o--ROW0-----^----|--^----|--^----|--^    |
//      | |               |    |                |       |       |       |
//      --|RST            |   4.7M              |       |       |       |
//        |               |    |                |       |       |       |
//        |               |   GND          ›-/ -o  ›-/ -o  ›-/ -o  ›-/ -o
//        |               |                |    |  |    |  |    |  |    |
//        |           P1.1|‹---o--ROW1-----^----|--^----|--^----|--^    |
//        |               |    |                |       |       |       |
 //       |               |   4.7M              |       |       |       |
//        |               |    |                |       |       |       |
//        |               |   GND          ›-/ -o  ›-/ -o  ›-/ -o  ›-/ -o
//        |               |                |    |  |    |  |    |  |    |
//        |           P1.2|‹---o--ROW2-----^----|--^----|--^----|--^    |
//        |               |    |                |       |       |       |
//        |               |   4.7M              |       |       |       |
//        |               |    |                |       |       |       |
//        |               |   GND          ›-/ -o  ›-/ -o  ›-/ -o  ›-/ -o
//        |               |                |    |  |    |  |    |  |    |    
//        |           P1.3|‹---o--ROW3-----^----|--^----|--^----|--^    |
//        |               |    |                |       |       |       |
//        |               |   4.7M              |       |       |       |
//        |               |    |                |       |       |       |
//        |               |   GND               |       |       |       |
//        |           P2.0|--›----COL0----------^       |       |       |
//        |           P2.1|--›----COL1------------------^       |       |
//        |           P2.6|--›----COL2--------------------------^       |
//        |           P2.7|--›----COL3----------------------------------^
//
//
//   Caleb Overbay
//   Texas Instruments Inc.
//   Aug 2017
//   Built with IAR Embedded Workbench v7.10 & Code Composer Studio v7.2
//**************************************************  ****************************

#include ‹msp430.h›
#include ‹stdint.h›

/* Constant Definitions */
#define TOTAL_KEYS     16   // Number of Buttons on Keypad
#define TOTAL_COLS     4    // Number of Columns on Keypad
#define TOTAL_ROWS     4    // Number of Rows on Keypad

int main(void)
{
    
WDTCTL WDTPW WDTHOLD;    // Stop WDT

    
int8_t key;                  // Stores value of pressed key

    
UART_init();                 // Initialize UART interface

    
PM5CTL0 &= ~LOCKLPM5;    // Disable the GPIO power-on default high-impedance
                             // mode to activate configured port settings

    
__enable_interrupt();    // Enable global interrupts

    /* Main loop */
    
while(1)
    {
        
Keypad_setupForPress();       // Wait for a button press
        
key Keypad_performScan();   // Determine which button was pushed

        
if(key ›= 0)                  // Filter out false button presses
        
{
            
UART_sendByte(key);       // Transmit key number

            // Loop waiting for release of all keys
            
while(Keypad_performScan() ›= 0)
            {
                
Keypad_setupForRelease();
            }
        }
    }
}

/**
 * Setup keypad I/O for a button push
 * P1.0 to P1.3 = input, interrupt on rising edge
 * P2.0, P2.1, P2.6, P2.7 = output high
 *
 * Unused pins = output low
 * Enter LPM4, wake on button push
 */
static inline void Keypad_setupForPress()
{
    
PADIR 0xFFF0;                        // P1.0 to P1.3 = input
    
PAOUT 0xC300;                        // P2.0-P2.1, P2.6-P2.7 = output high
    
P1IES 0x00;                          // P1.0 to P1.3 interrupt rising edge
    
P1IFG 0;                             // Clear P1 interrupt flags
    
P1IE  = (BIT0 BIT1 BIT2 BIT3);   // Enable P1.0 to P1.3 interrupts

    
__bis_SR_register(LPM4_bits);          // Enter LPM4, wake on button push
    
WDT_startDebounce();                   // Debounce button
}

/**
 * Setup keypad I/O for a button release
 * P1.0 to P1.3 = input, interrupt on falling edge
 * Only a single P2.x column remains high from Keypad_performScan()
 *
 * Enter LPM4, wake on button release
 */
static inline void Keypad_setupForRelease()
{
    
P1IES = (BIT0 BIT1 BIT2 BIT3);  // P1.0 to P1.3 interrupt falling edge
    
P1IFG 0x00;                         // Clear P1 interrupt flags
    
P1IE =  (BIT0 BIT1 BIT2 BIT3);  // Enable P1.0 to P1.3 interrupts

    
__bis_SR_register(LPM4_bits);         // Enter LPM4, wake on button release
    
WDT_startDebounce();                  // Debounce button
}

/**
 * Scans the keys to determine which button was pushed
 * If button was pushed, column containing button remains driven high
 * and others are driven low
 *
 * Returns the button number pushed
 */
static int8_t Keypad_performScan(void)
{
    
uint8_t pressedKeys 0;
    
uint8_t testRow;
    
int8_t keyNum = -1;
    
uint8_t col;
    
uint8_t row;

    
P2OUT 0x00;    // Set columns to output low

    // Loop the columns, setting only one high at a time
    
for (col 0col ‹ TOTAL_COLScol++)
    {
        
//Turn on a single column
        
switch(col)
        {
            case 
0:
                
P2OUT BIT0;     // select column 0 (Col0)
                
break;
            case 
1:
                
P2OUT BIT1;     // select column 1 (Col1)
                
break;
            case 
2:
                
P2OUT BIT6;     // select column 2 (Col2)
                
break;
            case 
3:
                
P2OUT BIT7;     // select column 3 (Col3)
                
break;
            default:
                
__no_operation(); // add more cases if TOTAL_COLS › 4
                
break;
        }

        
pressedKeys = (P1IN 0x0F);    // Capture the row input

        
testRow BIT0;                 // Start cycling at Row 0

        // Cycle through the rows determining if a key is pressed
        
for (row 0row ‹ TOTAL_ROWSrow++)
        {
            if (
pressedKeys testRow)
            {
                
keyNum = (row TOTAL_COLS) + col;  // Calculate button number

                // Break out of loops
                
col TOTAL_COLS;
                
row TOTAL_ROWS;
            }
            
testRow testRow ‹‹ 1// Shift to next row
        
}
    }

    return(
keyNum);

parovoZZ вне форума  
Непрочитано 04.09.2020, 16:51  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,798
Сказал спасибо: 2,913
Сказали Спасибо 3,120 раз(а) в 2,111 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Динамическая клавиатура.

Сообщение от parovoZZ Посмотреть сообщение
Могу дать код для MSP430 из набора стандартных примеров.
Да это и у производителя МК (прародителя) есть:
AN_1232 - AVR240: 4x4 Keypad-Wake Up on Keypress on tinyAVR and megaAVR devices - http://www.microchip.com//wwwAppNote...pnote=en591177
AN_1231 - AVR242: Multiplexing LED Drive & a 4x4 Keypad on tinyAVR and megaAVR devices - http://www.microchip.com//wwwAppNote...pnote=en591259
AN_2532 - AVR243: Matrix Keyboard Decoder on tinyAVR and megaAVR devices - http://www.microchip.com//wwwAppNote...pnote=en591996
__________________
Экзорцист 40-го уровня.
ForcePoint вне форума  
Непрочитано 04.09.2020, 17:05  
parovoZZ
Почётный гражданин KAZUS.RU
 
Регистрация: 15.11.2010
Сообщений: 2,378
Сказал спасибо: 338
Сказали Спасибо 328 раз(а) в 253 сообщении(ях)
parovoZZ на пути к лучшему
По умолчанию Re: Динамическая клавиатура.

Тогда не понимаю, где наросла проблема.
parovoZZ вне форума  
Непрочитано 04.09.2020, 20:50  
Yarikkasl
Частый гость
 
Регистрация: 11.03.2019
Сообщений: 26
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Yarikkasl на пути к лучшему
По умолчанию Re: Динамическая клавиатура.

parovoZZ, видимо по тому что я не там смотрел.
Yarikkasl вне форума  
Непрочитано 04.09.2020, 20:52  
Yarikkasl
Частый гость
 
Регистрация: 11.03.2019
Сообщений: 26
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Yarikkasl на пути к лучшему
По умолчанию Re: Динамическая клавиатура.

ForcePoint, Спасибо! Почитаю
Yarikkasl вне форума  
Непрочитано 04.09.2020, 22:52  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,508
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Динамическая клавиатура.

Ой, да у него там два dalay-я по одному циклу декремента )) Че там такого трагикомичного то?
Если выходы переключают только лог.уровни (активный столбец - 0, неактивные стобцы - 1), то задержек в принципе не требуется, переходные процессы завершаются быстрее, чем работает этот МК. А если выходы переключаются в Hi-Z для неактивных столбцов, а на строках стоят подтяжки, тогда переходные процессы могут длиться дольше, до нескольких микросекунд, и без задержек между активациями столбцов возможны ложные определения кнопок.

Вот осциллограмма сигналов. Зеленые - это выходы в режиме 1/0, остальное - выходы в режиме 0/Hi-Z. В показанном примере подтяжка около 40 кОм (внутренняя).
Миниатюры:
Нажмите на изображение для увеличения
Название: DS1Z_QuickPrint14.png
Просмотров: 0
Размер:	41.3 Кб
ID:	156076  
NewWriter вне форума  
Непрочитано 10.09.2020, 13:09  
Yarikkasl
Частый гость
 
Регистрация: 11.03.2019
Сообщений: 26
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Yarikkasl на пути к лучшему
По умолчанию Re: Динамическая клавиатура.

По итогу все паузы заменил на _delay_us(5), и да где то прочел про то что нужно отключить фьюз jtagen отключил- непомогло, так же отключил фьюз м103с и все заработало. Всем спасибо! Пологаю что следующая порция вопросов будет про обмен по usart0 и usart1
Yarikkasl вне форума  
 

Закладки

Метки
atmega128, atmel studio, прерывания
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Клавиатура Mera-REFA KL-13 теряет 1 бит при передачи в Arduino AVRkin Микроконтроллеры, АЦП, память и т.д 10 20.02.2018 06:10
Старая клавиатура для "486", типа AT Cahes2 Ремонт оргтехники 25 31.01.2014 16:48
iPod Mini A1051. Не работает клавиатура spacebrother Поиск схем. Делимся схемами 0 17.02.2012 06:37
Не матричная клавиатура для МП alexplev Микроконтроллеры, АЦП, память и т.д 8 22.02.2009 03:16
Динамическая индикация,вопрос Zemlyanov Микроконтроллеры, АЦП, память и т.д 29 05.08.2008 19:13


Часовой пояс GMT +4, время: 17:42.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot