Mais um exemplo, do uso da biblioteca GLCD (ks0108.c) portada para Pinguino!
2010-08-26
2010-08-25
2010-08-14
Biblioteca LCD Pinguino!
Finalmente consegui, migrar o código wiring do pinguino para SDCC e transformei em uma biblioteca .c/.h. A biblioteca é composta de dois arquivos lcdta de dois arquivos lcdlib.c e lcdlib.h, também modifiquei o exemplo do post anterior (Pinguino Clock com a mini animação do jogo pong)
Apenas uma pequena explicação de como transformar um arquivo .pde em uma biblioteca pinguino:
Como usar a biblioteca:
Assim temos um problema de ordenação das includes que não pode ser resolvido somente via biblioteca, para resolver isso temos de fazer os includes que a IDE pinguino faria, manualmente, como no trecho de código abaixo (código completo no zip acima):
// Remove line above if you using a pinguino with PIC18F2550, need this define before include digitalw.c
Reparem que a minha nova biblioteca, compatível com os códigos arduino em 99%, só é chamada após carregarmos as bibliotecas necessárias, caso deixássemos por conta da IDE, esta include viria na frente das outras no arquivo define.h
OBS: Esta versão só funciona com a Pinguino IDE beta8 ou maior. Outra versão será lançada junto com a IDE beta9
- Baixe os fontes aqui: lcdlib_sample.zip
Apenas uma pequena explicação de como transformar um arquivo .pde em uma biblioteca pinguino:
- Compile o arquivo .pde da sua biblioteca.
- Edite o arquivo source/user.c
- Crie sua biblioteca com base neste arquivo.
Como usar a biblioteca:
- Lembre-se que digitalwrite, e os comandos de delay do arduino não fazem parte do pacote SDCC, e que o pinguino não os adiciona as includes para esses, ou os adicionará ao final do arquivo tmp/define.h o que gerará erros de compilação na IDE Pinguino/SDCC.
Assim temos um problema de ordenação das includes que não pode ser resolvido somente via biblioteca, para resolver isso temos de fazer os includes que a IDE pinguino faria, manualmente, como no trecho de código abaixo (código completo no zip acima):
// Remove line above if you using a pinguino with PIC18F2550, need this define before include digitalw.c
#define PIC18F4550
#include <stdlib.h>
//Include libraries used on you user lib, before include that, pinguino IDE works well on it.
#include <delay.h>
#include <arduinodelay.c>
#include <digitalw.c>
//LCD library
#include <lcdlib.c>
Reparem que a minha nova biblioteca, compatível com os códigos arduino em 99%, só é chamada após carregarmos as bibliotecas necessárias, caso deixássemos por conta da IDE, esta include viria na frente das outras no arquivo define.h
OBS: Esta versão só funciona com a Pinguino IDE beta8 ou maior. Outra versão será lançada junto com a IDE beta9
Gerador de caracteres para LCD/Pinguino
Ontem estava trabalhando na parte final do projeto da biblioteca LCD para pinguino, e deparei com a tarefa de criar caracteres do usuário, bom a tarefa apesar de simples é um pouco tediosa e resolvi automatizar o processo.
Assim nasceu o Easy LCD CGRAM, desenvolvi em Java usando o NetBeans, não é a melhor opção mas tenho de estudar Java para a faculdade... :-(
A ideia é simples, são 64 botões que representam os pixels do display LCD, você clica nestes e depois gera o código para uso com a biblioteca pinguino que postei antes, o processo todo é muito fácil.
Screenshot:
Fontes e programa:
easy_LCD_CGRAM.zip
Como usar?
Basta colocar o código dos caracteres após o comando begin(), no setup{...}, e usa-los no loop{...} com o comando write():
Apenas, lembrem-se de usar o restante do código .pde e arquivo .h do post anterior...
/*
*************************************************************************
***************************************************************************
** LCD pratical use! PINGUINO CLOCK! **
***************************************************************************
*************************************************************************
*/
// Remove line above if you using a pinguino with PIC18F2550
#define PIC18F4550
#define HOUR 20
#define MIN 19
//global vars
uchar counter = 0;
uchar sec = 0;
uchar min = 0;
uchar hour = 0;
uchar num = 0;
void setup(){
//8 bits mode
//lcd(8, 9, 0, 1, 2, 3, 4, 5, 6, 7); // RS, E, D0 ~ D7
//4 bits mode, dont use last four pins ...
lcd(8, 9, 4, 5, 6, 7, 0, 0, 0, 0); // RS, E, D4 ~ D8
//LCD format
begin(2, 0);
//Creating user chars
//Set AC register to initial CGRAM position
command(0x40);
//Write character code
write(0x3);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x8);
write(0x18);
//Write character code
write(0x6);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x4);
write(0x0);
write(0xc);
//Write character code
write(0x6);
write(0x0);
write(0x0);
write(0x2);
write(0x0);
write(0x0);
write(0x0);
write(0xc);
//Write character code
write(0xc);
write(0x0);
write(0x1);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x6);
//Write character code
write(0x6);
write(0x2);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x3);
//Write character code
write(0xc);
write(0x0);
write(0x4);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x6);
//Write character code
write(0x6);
write(0x0);
write(0x0);
write(0x0);
write(0x8);
write(0x0);
write(0x0);
write(0xc);
//Write character code
write(0x3);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x10);
write(0x0);
write(0x18);
/* Debug */
pinMode(13, OUTPUT); // LED on pin 12
//Setup buttons
pinMode(20, INPUT);
pinMode(19, INPUT);
}
void loop()
{
// Output string
home();
lcdPrint("Pinguino Clock!"); // Output char
setCursor(15, 1);
//Using user chars, a very small pong game! :P
if(counter % 2){
num++;
if(num > 8){
num = 0;
}
write(num);
}
if (counter>9){
counter = 0;
sec++;
}
if (sec>59){
sec = 0;
min++;
}
if (min>59){
min = 0;
hour++;
}
if (hour>23){
hour = 0;
}
setCursor(0, 1);
if (hour < 10)
lcdPrint("0");
printNumber(hour, 10);
if (min < 10)
lcdPrint(":0");
else
lcdPrint(":");
printNumber(min, 10);
if (sec < 10)
lcdPrint(":0");
else
lcdPrint(":");
printNumber(sec, 10);
//set hour and min
if(digitalRead(HOUR) == LOW){
hour++;
}
if(digitalRead(MIN) == LOW){
min++;
}
counter++;
delay(52); //Need two delays by 52ms, crystal/clock/PIC18F code? DSO give me 100.1ms with this!
digitalWrite(13, LOW);
delay(52);
digitalWrite(13, HIGH);
}
Assim nasceu o Easy LCD CGRAM, desenvolvi em Java usando o NetBeans, não é a melhor opção mas tenho de estudar Java para a faculdade... :-(
A ideia é simples, são 64 botões que representam os pixels do display LCD, você clica nestes e depois gera o código para uso com a biblioteca pinguino que postei antes, o processo todo é muito fácil.
Screenshot:
Fontes e programa:
easy_LCD_CGRAM.zip
Como usar?
Basta colocar o código dos caracteres após o comando begin(), no setup{...}, e usa-los no loop{...} com o comando write():
Apenas, lembrem-se de usar o restante do código .pde e arquivo .h do post anterior...
/*
*************************************************************************
***************************************************************************
** LCD pratical use! PINGUINO CLOCK! **
***************************************************************************
*************************************************************************
*/
// Remove line above if you using a pinguino with PIC18F2550
#define PIC18F4550
#define HOUR 20
#define MIN 19
//global vars
uchar counter = 0;
uchar sec = 0;
uchar min = 0;
uchar hour = 0;
uchar num = 0;
void setup(){
//8 bits mode
//lcd(8, 9, 0, 1, 2, 3, 4, 5, 6, 7); // RS, E, D0 ~ D7
//4 bits mode, dont use last four pins ...
lcd(8, 9, 4, 5, 6, 7, 0, 0, 0, 0); // RS, E, D4 ~ D8
//LCD format
begin(2, 0);
//Creating user chars
//Set AC register to initial CGRAM position
command(0x40);
//Write character code
write(0x3);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x8);
write(0x18);
//Write character code
write(0x6);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x4);
write(0x0);
write(0xc);
//Write character code
write(0x6);
write(0x0);
write(0x0);
write(0x2);
write(0x0);
write(0x0);
write(0x0);
write(0xc);
//Write character code
write(0xc);
write(0x0);
write(0x1);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x6);
//Write character code
write(0x6);
write(0x2);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x3);
//Write character code
write(0xc);
write(0x0);
write(0x4);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x6);
//Write character code
write(0x6);
write(0x0);
write(0x0);
write(0x0);
write(0x8);
write(0x0);
write(0x0);
write(0xc);
//Write character code
write(0x3);
write(0x0);
write(0x0);
write(0x0);
write(0x0);
write(0x10);
write(0x0);
write(0x18);
/* Debug */
pinMode(13, OUTPUT); // LED on pin 12
//Setup buttons
pinMode(20, INPUT);
pinMode(19, INPUT);
}
void loop()
{
// Output string
home();
lcdPrint("Pinguino Clock!"); // Output char
setCursor(15, 1);
//Using user chars, a very small pong game! :P
if(counter % 2){
num++;
if(num > 8){
num = 0;
}
write(num);
}
if (counter>9){
counter = 0;
sec++;
}
if (sec>59){
sec = 0;
min++;
}
if (min>59){
min = 0;
hour++;
}
if (hour>23){
hour = 0;
}
setCursor(0, 1);
if (hour < 10)
lcdPrint("0");
printNumber(hour, 10);
if (min < 10)
lcdPrint(":0");
else
lcdPrint(":");
printNumber(min, 10);
if (sec < 10)
lcdPrint(":0");
else
lcdPrint(":");
printNumber(sec, 10);
//set hour and min
if(digitalRead(HOUR) == LOW){
hour++;
}
if(digitalRead(MIN) == LOW){
min++;
}
counter++;
delay(52); //Need two delays by 52ms, crystal/clock/PIC18F code? DSO give me 100.1ms with this!
digitalWrite(13, LOW);
delay(52);
digitalWrite(13, HIGH);
}
2010-08-12
Pinguino Clock!
Pinguino é um projeto que visa utilizarmos os pequenos e poderosos programas e bibliotecas para Arduino (Atmel/AVR) em microcontroladores Microchip/PIC.
Por enquanto o projeto pinguino ainda está longe da robustez e eficiência dos arduinos, contudo muito em breve teremos um significativo progresso com a nova IDE beta9.
Por enquanto o projeto pinguino ainda está longe da robustez e eficiência dos arduinos, contudo muito em breve teremos um significativo progresso com a nova IDE beta9.
- Eis o projeto Pinguino Clock!
![]() |
| Pinguino Clock - PIC18F4550 + LCD16x2 |
- Esquema do circuito:
- Codigo:
O foi totalmente feito na linguagem C (Processing/Wiring) do arduino e baseado na biblioteca LiquidCrystal do projeto arduino.
Basicamente a proposta é termos a mesma gama de comandos e funções do projeto arduino, com o mínimo de modificações a serem necessárias durante o porting.
2010-04-19
Bateria VL-1220/VCN da Panasonic-BSG, consegui uma! :P
| A bateria recarregável que custa menos de 15,00 U$ e é vendida no mercado nacional por mais de 100,00 reais, bom é verdade que é difícil achar aonde compra-la, mas os caras metem a mão aqui no Brasil, uma pena isso! Para quem, estiver se perguntando: "Para que esse doido quer isso?" bom essa bateria é para a placa de desenvolvimento ARM Cortex Beagleboard, ela mantém o backup do RTC (Real Time Clock) da placa. Comprei a minha no eBay da Alemanha na loja AkkuWelt. |
2010-04-01
Aqui jaz uma ATMEGA328p :-(
Meu primeiro ATMEGA328p e faço a besteira de setar errado os fusíveis dele, isso que dá ficar trabalhando somente com a linha PIC, a gente pega uma coisa diferente e faz merda.
Aqui a foto da tentativa de traze-lo de volta:
O monte de fios ai foi uma tentativa de resetar os fusíveis do ATMEGA328p, mais detalhes aqui.
Infelizmente não funcionou, que cibertron o tenha.
Aqui a foto da tentativa de traze-lo de volta:
O monte de fios ai foi uma tentativa de resetar os fusíveis do ATMEGA328p, mais detalhes aqui.
Infelizmente não funcionou, que cibertron o tenha.
Assinar:
Postagens (Atom)




