só o microcontrolador e a estrutura standalone, fora isso, se usar o arduino mesmo, tem que dizer se estamos upando um arduino pro mini 3.3v 8mhz ou pra um arduino Uno 5v 16mhz.
Adorei, sua dica de leitura da biblioteca wiring.c, tem muita coisa lá realmente.
Parece que ele faz a correção de acordo com o clock do cristal, acho que a resposta tá nessa parte aqui:
/* Delay for the given number of microseconds. Assumes a 1, 8, 12, 16, 20 or 24 MHz clock. */ void delayMicroseconds(unsigned int us) { // call = 4 cycles + 2 to 4 cycles to init us(2 for constant delay, 4 for variable) // calling avrlib's delay_us() function with low values (e.g. 1 or // 2 microseconds) gives delays longer than desired. //delay_us(us); #if F_CPU >= 24000000L // for the 24 MHz clock for the aventurous ones, trying to overclock // zero delay fix if (!us) return; // = 3 cycles, (4 when true) // the following loop takes a 1/6 of a microsecond (4 cycles) // per iteration, so execute it six times for each microsecond of // delay requested. us *= 6; // x6 us, = 7 cycles // account for the time taken in the preceeding commands. // we just burned 22 (24) cycles above, remove 5, (5*4=20) // us is at least 6 so we can substract 5 us -= 5; //=2 cycles #elif F_CPU >= 20000000L // for the 20 MHz clock on rare Arduino boards // for a one-microsecond delay, simply return. the overhead // of the function call takes 18 (20) cycles, which is 1us __asm__ __volatile__ ( "nop" "\n\t" "nop" "\n\t" "nop" "\n\t" "nop"); //just waiting 4 cycles if (us <= 1) return; // = 3 cycles, (4 when true) // the following loop takes a 1/5 of a microsecond (4 cycles) // per iteration, so execute it five times for each microsecond of // delay requested. us = (us << 2) + us; // x5 us, = 7 cycles // account for the time taken in the preceeding commands. // we just burned 26 (28) cycles above, remove 7, (7*4=28) // us is at least 10 so we can substract 7 us -= 7; // 2 cycles #elif F_CPU >= 16000000L // for the 16 MHz clock on most Arduino boards // for a one-microsecond delay, simply return. the overhead // of the function call takes 14 (16) cycles, which is 1us if (us <= 1) return; // = 3 cycles, (4 when true) // the following loop takes 1/4 of a microsecond (4 cycles) // per iteration, so execute it four times for each microsecond of // delay requested. us <<= 2; // x4 us, = 4 cycles // account for the time taken in the preceeding commands. // we just burned 19 (21) cycles above, remove 5, (5*4=20) // us is at least 8 so we can substract 5 us -= 5; // = 2 cycles, #elif F_CPU >= 12000000L // for the 12 MHz clock if somebody is working with USB // for a 1 microsecond delay, simply return. the overhead // of the function call takes 14 (16) cycles, which is 1.5us if (us <= 1) return; // = 3 cycles, (4 when true) // the following loop takes 1/3 of a microsecond (4 cycles) // per iteration, so execute it three times for each microsecond of // delay requested. us = (us << 1) + us; // x3 us, = 5 cycles // account for the time taken in the preceeding commands. // we just burned 20 (22) cycles above, remove 5, (5*4=20) // us is at least 6 so we can substract 5 us -= 5; //2 cycles #elif F_CPU >= 8000000L // for the 8 MHz internal clock // for a 1 and 2 microsecond delay, simply return. the overhead // of the function call takes 14 (16) cycles, which is 2us if (us <= 2) return; // = 3 cycles, (4 when true) // the following loop takes 1/2 of a microsecond (4 cycles) // per iteration, so execute it twice for each microsecond of // delay requested. us <<= 1; //x2 us, = 2 cycles // account for the time taken in the preceeding commands. // we just burned 17 (19) cycles above, remove 4, (4*4=16) // us is at least 6 so we can substract 4 us -= 4; // = 2 cycles
…
Adicionado por Weider Duarte ao 14:53 em 13 outubro 2016
mpartilhar todos os outros pinos, apenas o Enable precisa ser unico.
Tudo que se refere a lcd passa a se referir a lcd1 ou lcd2 conforme sua necessidade.
O uso de mais teclas recomendo construir um teclado maior. Vc pode construir um teclado de 8x4 assim gastaria só mais 4 pinos. Aih por ex:
const byte ROWS = 8; //Quatro linhas
const byte COLS = 4; //QUatro
char convteclado[16]={'1','4','7','2','5','8'.... //Matriz de conversão de posicoes teclado 2 para teclado1.
//Mapeamento de teclas
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A', 'E','I','M','Q',},
{'4', '5', '6', 'B', 'F','J'... // '...' significa que vc tem que terminar a tabela
{'7', '8', '9', 'C', 'G','K'...
{'*', '0', '#', 'D', 'H','L'...
Aih vc precisa fazer uma lógica depois pra transformar o 'E' em '1' do teclado 2. algo como: if (key>='E') teclado=1; // Como estão em ordem os caracteres é possivel fazer só isso para saber se é uma tecla 'alta'.
else
{teclado=2;
key=convteclado[key-'E']; // usa a tabela para converter.
}…
Adicionado por Eduardo ao 0:28 em 29 setembro 2017
inadas.
vou explicar uma delas, mas existem outras,
seu "fluxograma"
1. Se o pino 2 estiver ligado,
1.1 então liga o pino 8,
1.2 senão
1.3 desliga o pino 8
2. Se o pino 3 estiver ligado,
2.1 então liga o pino 10... 3. espera 1 segundo 4. liga o pino 9 5. espera 2 segundos... 6. desliga o pino 9 7. espera 1 segundo... 8. desliga o pino 8 9. espera 2 segundos...10. liga o pino 1111. espera 2 segundos...12. desliga o pino 11
?????? ------> > e a partir daqui faz o que ????? pois entrou
nesta rotina com pino3 ligado
13. se o pino 2 estiver ligado,
13.1 então espera 30 segundos14. e liga o pino 11 15. espera 2 segundos...16. desliga o pino 1117. se o pino 2 estiver ligado,
17.1 então espera 30 segundos18. e liga o pino 1119. espera 2 segundos...20. desliga o pino 1121. se o pino 2 estiver ligado,
21.1 então espera 30 segundos22. e liga o pino 1123. espera 2 segundos...24. desliga o pino 1125. se o pino 2 estiver ligado,
25.1 então liga o pino 1226. se o pino 7 estiver ligado,
26.1 então desliga o pino 12,
26.2 senão
26.3 liga o pino 12
27. se o pino3 estiver ligado e o pino 2 estiver desligado --> > Se pino 3 ligado e pino 2 ligado, faz o que?27.1 então desliga o pino 11
27.2 e espera que o pino 2 ligue para iniciar tudo
De uma analisada completa no fluxograma que encontrará mais inconsistências.
RV…
Adicionado por mineirin RV ao 12:01 em 30 novembro 2019