Translate

terça-feira, 3 de setembro de 2013

Configurar Ubuntu Server para instalação do CD/DVD (12.04/13.04)

1. Montar o cd na pasta /media/cdrom: $ mount /dev/cdrom /media/cdrom
2. Caso necessário, executar o comando para atualizar a lista de pacotes do CD: $ apt-cdrom -m add
3. Instalar pelo apt-get, por exemplo: $ apt-get install lamp-server^

domingo, 16 de junho de 2013

Bootloader no Arduino Minimal Shrimp com USBAsp





Esquema para ligação do USBasp para carregamento do bootloader no ATMega328P-PU.
Utilizar os pinos 1-RESET, 8/22-GND, 7/21/20-VCC, 19-SCK, 18-MISO, 17-MOSI.



No Arduino Minimal Shrimp Simples funcionou perfeitamente.

Driver: http://www.fischl.de/usbasp/

Testado no Win 8.1
---------------

Tentando programar um ATMega8, não deu certo, de primeira. Tentarei depois. Lembrando que o USBasp é mantido por um ATMega8-16AU

---------

Consegui programar o bootloader e fazer upload do programa, tudo com o USBasp.

Ligando conforme o esquema acima, consegui carregar o bootloader com o avrdudess (http://blog.zakkemble.co.uk/avrdudess-a-gui-for-avrdude/) uma GUI para o avrdude. Basta arrastar o bootloader (arduino-1.5.5-r2\hardware\arduino\avr\bootloaders\atmega8\ATmegaBOOT.hex) para o campo Flash), configurar programmer (USBASP), porta, baud rate (19200), bit clock (1.5), MCU (atmega8) e clicar em Program!.

Utilizando o Arduino IDE 1.5.5-r2, caso utilize  o "Carregar usando programador", ele carregará o programa sem bootloader (substituirá). Acertar a Placa para "Arduino NG or older", o processador para "atMega8", a porta para a utilizada pelo programador, o programador para "USBasp".
Caso queira carregar pelo Arquivo/Carregar, o arquivo contido no "Arquivo/Preferências/Mais preferências podem ser editadas diretamente no arquivo..." deve ser apagado para ser recriado ou corrigido. Não sei ao certo, mas aparentemente ele somente altera o parâmetro "programmer=arduino:usbasp".  Existe um problema no arquivo de configuração, que força o uso do Arduino como programador, mesmo estando o USBasp selecionado. Para corrigir, basta editar o arquivo arduino-1.5.5-r2\hardware\arduino\avr\boards.txt, localizando e alterando a linha :

...
atmegang.name=Arduino NG or older

atmegang.upload.tool=avrdude
atmegang.upload.protocol=arduino     <<<======
atmegang.upload.speed=19200

atmegang.bootloader.tool=avrdude
....

para

atmegang.upload.protocol=usbasp

Deve entrar novamente na IDE para efetivar e poderá carregar o programa.

Outra observação é que o Low fuse original (L) 0xE1 trabalha em 1 MHz, deixando o microcontrolador muiiiiitoooo lento. Alterei para 0xE4, fazendo-o  trabalhar a 8 MHz utilizando o clock interno, sem precisar de cristal. Muittooo mais rápido. Dá para notar no exemplo Blink. Caso queira utilizar um cristal externo de 16 Mhz, pode alterar para 0xEF. Outros cálculos disponíveis em http://www.engbedded.com/fusecalc. Não é simples, mas estudando um pouco se consegue usar.

====================================

Atualização: em Julho/2020 voltei a utilizar o USBasp, mas sofri um pouco para conseguir utilizá-lo no Windows 10 64 1909.

A solução foi baixar o Zadig (https://zadig.akeo.ie/) e substituir o driver do USBasp pelo libusbK, o que funcionou perfeitamente para o ATtiny85 em 19200/1.5 Mhz no AVRDudess.

Atualização: em Agosto 2020 fiz a carga do bootloader no atmega8 e atmega328p usando a protoboard da foto. Vários problemas de driver do USBasp. Vá almoçar volte e teste de novo...
Ia atualizar o firmware do USBasp, mas funcionou antes disso. Feito com Arduino IDE.


1-RESET, 8-GND, 7-VCC, 19-SCK, 18-MISO, 17-MOSI. 9 e 10 com Cristal de 16 Mhz




sábado, 15 de junho de 2013

Arduino Minimo


Este esquema é o menor que encontrei, mais simples e mais fácil de montar. Um conversor USB-Serial TTL com CP2102 sai por uns R$ 17 por estes dias. O restante das peças, um ATMega328P-PU com bootloader, uns R$ 13 o Cristal de 16 Mhz de R$ 3 a 5. O resto é dinheiro de pinga.

shrimp_breadboard_minimal
Erratum: this circuit should show a diode connecting from the reset pin to the power pin, in parallel with the 10KiloOhmresistor. The diode is there to handle a very rare failure condition and can normally be omitted.

O resto dos materiais: 2x22pF Capacitor, 1x100nF Capacitor, 1x10KΩ Resistor 

Atualização Agosto/2020: montei o ATmega8 no mesmo esquema, mas com reset manual (switch no pino reset com ground), e o usb serial é o CH340G. A carga foi tranquila, observando que frequentemente há uma demora maior para mostrar a mensagem de que está sendo feito o carregamento do programa. O botão deve ser mantido pressionado ao início da compilação e solto quando aparecer a mensagem Carregando. Como a versão mudou muito desde a publicação inicial deste post (era a versão 0023, e hoje 1.8.13) a versão da placa é a Arduino NG para o ATmega8.





quinta-feira, 6 de junho de 2013

Pinagem: USBASP ligado no Arduino via ICSP



Difícil achar a pinagem clara do ICSP na placa do arduino. Mas o esquema é o seguinte: o ponto branco é a referência para o pino 1. Assim temos os 3 pinos consecutivos: 
  • 1-MISO
  • 2-SCK
  • 3-RST
Na outra fila de 3, à partir do mais próximo ao ponto branco:
  • 4-VCC
  • 5-MOSI
  • 6-GND

Lembrando que a imagem está espelhada na placa, pois é a posição como conector.


terça-feira, 4 de junho de 2013

Breakout mjkdz LCD 1602 no Arduíno



Depois de muito custo, consegui achar a library do breakout genérico i2c para LCD 1602 que comprei no mercado livre. Desculpe a mistureba, mas vou deixar registrado aqui para auxílio a outros entusiastas. O arquivo deixei no Googledrive também. O esquema de ligação, outra coisa que a gente procura e não acha fácil, segue abaixo.

  • LCD 5V-5V Arduino
  • LCD SDA-A4 Arduino
  • LCD SCL-A5 Arduino
  • LCD GND-GND Arduino
E driver liga o backlight também, restando apenas o controle de contraste manual. Aparentemente funciona, obedecendo a pinagem, com os HD44780 - LCD1602

Atenção: caso ocorram os seguintes problemas na compilação:

...\LiquidCrystal_I2C.cpp: In member function 'void LiquidCrystal_I2C::expanderWrite(uint8_t)':
...\LiquidCrystal_I2C.cpp:243: error: 'class TwoWire' has no member named 'write'

alterar a linha 243 do arquivo LiquidCrystal_I2C.cpp, trocando o write por send:
de
Wire.write((int)(_data) | _backlightval);
para
Wire.send((int)(_data) | _backlightval);


domingo, 2 de junho de 2013

Atualização do arquivo de tradução GroceryCRUD 1.3.3

grocery CRUD logo

Atualizei o arquivo de tradução do GroceryCRUD. Link para Download aqui. Sobrepor o arquivo D:\xampp\htdocs\codeigniter\assets\grocery_crud\languages\pt-br.portuguese.php.

Exemplo para iniciantes do GroceryCRUD

grocery CRUD logo

Do site do GroceryCRUD, um resumo do tutorial para iniciantes:

Executar a criação da tabela e preenchimento de registros de exemplo abaixo:
CREATE TABLE IF NOT EXISTS `employees` (
  `employeeNumber` int(11) NOT NULL AUTO_INCREMENT,
  `lastName` varchar(50) NOT NULL,
  `firstName` varchar(50) NOT NULL,
  `extension` varchar(10) NOT NULL,
  `email` varchar(100) NOT NULL,
  `officeCode` varchar(10) NOT NULL,
  `file_url` varchar(250) CHARACTER SET utf8 NOT NULL,
  `jobTitle` varchar(50) NOT NULL,
  PRIMARY KEY (`employeeNumber`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1703 ;
 
INSERT INTO `employees` (`employeeNumber`, `lastName`, `firstName`, `extension`, `email`, `officeCode`, `file_url`, `jobTitle`) VALUES
(1002, 'Murphy', 'Diane', 'x5800', 'dmurphy@classicmodelcars.com', '1', '', 'President'),
(1056, 'Patterson', 'Mary', 'x4611', 'mpatterso@classicmodelcars.com', '1', '', 'VP Sales'),
(1076, 'Firrelli', 'Jeff', 'x9273', 'jfirrelli@classicmodelcars.com', '1', '', 'VP Marketing'),
(1088, 'Patterson', 'William', 'x4871', 'wpatterson@classicmodelcars.com', '6', '', 'Sales Manager (APAC)'),
(1102, 'Bondur', 'Gerard', 'x5408', 'gbondur@classicmodelcars.com', '4', 'pdftest.pdf', 'Sale Manager (EMEA)'),
(1143, 'Bow', 'Anthony', 'x5428', 'abow@classicmodelcars.com', '1', '', 'Sales Manager (NA)'),
(1165, 'Jennings', 'Leslie', 'x3291', 'ljennings@classicmodelcars.com', '1', '', 'Sales Rep'),
(1166, 'Thompson', 'Leslie', 'x4065', 'lthompson@classicmodelcars.com', '1', '', 'Sales Rep'),
(1188, 'Firrelli', 'Julie', 'x2173', 'jfirrelli@classicmodelcars.com', '2', 'test-2.pdf', 'Sales Rep'),
(1216, 'Patterson', 'Steve', 'x4334', 'spatterson@classicmodelcars.com', '2', '', 'Sales Rep'),
(1286, 'Tseng', 'Foon Yue', 'x2248', 'ftseng@classicmodelcars.com', '3', '', 'Sales Rep'),
(1323, 'Vanauf', 'George', 'x4102', 'gvanauf@classicmodelcars.com', '3', '', 'Sales Rep'),
(1337, 'Bondur', 'Loui', 'x6493', 'lbondur@classicmodelcars.com', '4', '', 'Sales Rep'),
(1370, 'Hernandez', 'Gerard', 'x2028', 'ghernande@classicmodelcars.com', '4', '', 'Sales Rep'),
(1401, 'Castillo', 'Pamela', 'x2759', 'pcastillo@classicmodelcars.com', '4', '', 'Sales Rep'),
(1501, 'Bott', 'Larry', 'x2311', 'lbott@classicmodelcars.com', '7', '', 'Sales Rep'),
(1504, 'Jones', 'Barry', 'x102', 'bjones@classicmodelcars.com', '7', '', 'Sales Rep'),
(1611, 'Fixter', 'Andy', 'x101', 'afixter@classicmodelcars.com', '6', '', 'Sales Rep'),
(1612, 'Marsh', 'Peter', 'x102', 'pmarsh@classicmodelcars.com', '6', '', 'Sales Rep'),
(1619, 'King', 'Tom', 'x103', 'tking@classicmodelcars.com', '6', '', 'Sales Rep'),
(1621, 'Nishi', 'Mami', 'x101', 'mnishi@classicmodelcars.com', '5', '', 'Sales Rep'),
(1625, 'Kato', 'Yoshimi', 'x102', 'ykato@classicmodelcars.com', '5', '', 'Sales Rep'),
(1702, 'Gerard', 'Martin', 'x2312', 'mgerard@classicmodelcars.com', '4', '', 'Sales Rep');
 

Criar o arquivo Drive:\xampp\htdocs\codeigniter\application\views\our_template.php abaixo:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
 
<?php 
foreach($css_files as $file): ?>
    <link type="text/css" rel="stylesheet" href="<?php echo $file; ?>" />
 
<?php endforeach; ?>
<?php foreach($js_files as $file): ?>
 
    <script src="<?php echo $file; ?>"></script>
<?php endforeach; ?>
 
<style type='text/css'>
body
{
    font-family: Arial;
    font-size: 14px;
}
a {
    color: blue;
    text-decoration: none;
    font-size: 14px;
}
a:hover
{
    text-decoration: underline;
}
</style>
</head>
<body>
<!-- Beginning header -->
    <div>
        <a href='<?php echo site_url('examples/offices_management')?>'>Offices</a> | 
        <a href='<?php echo site_url('examples/employees_management')?>'>Employees</a> |
        <a href='<?php echo site_url('examples/customers_management')?>'>Customers</a> |
        <a href='<?php echo site_url('examples/orders_management')?>'>Orders</a> |
        <a href='<?php echo site_url('examples/products_management')?>'>Products</a> | 
        <a href='<?php echo site_url('examples/film_management')?>'>Films</a>
 
    </div>
<!-- End of header-->
    <div style='height:20px;'></div>  
    <div>
        <?php echo $output; ?>
 
    </div>
<!-- Beginning footer -->
<div>Footer</div>
<!-- End of Footer -->
</body>
</html>
 
Criar o arquivo Drive:\xampp\htdocs\codeigniter\application\controllers\main.php abaixo:
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
class Main extends CI_Controller {
 
    function __construct()
    {
        parent::__construct();
 
        /* Standard Libraries of codeigniter are required */
        $this->load->database();
        $this->load->helper('url');
        /* ------------------ */ 
 
        $this->load->library('grocery_CRUD');
 
    }
 
    public function index()
    {
        echo "<h1>Welcome to the world of Codeigniter</h1>";//Just an example to ensure that we get into the function
                die();
    }
 
    public function employees()
    {
        $this->grocery_crud->set_table('employees');
        $output = $this->grocery_crud->render();
 
        $this->_example_output($output);        
    }
 
    function _example_output($output = null)
 
    {
        $this->load->view('our_template.php',$output);    
    }
}
 
/* End of file main.php */
/* Location: ./application/controllers/main.php */
 
Chamar a página http://localhost/codeigniter/index.php/main/employees, e, estando os serviços Apache e Mysql funcionando e o restante da configuração ok, teremos:



Mudando a linguagem do GroceryCRUD

grocery CRUD logo

Para alterar a linguagem dos botões, títulos, etc do GroceryCRUD edite o arquivo D:\xampp\htdocs\codeigniter\application\config\grocery_crud.php. Procure pelo parâmetro $config['grocery_crud_default_language'] e deixe como:

$config['grocery_crud_default_language'] = 'pt-BR.portuguese';

sexta-feira, 31 de maio de 2013

Grocery CRUD 1

grocery CRUD logo
Verificando se o GroceryCRUD está ok:
  • carregue o módulo de administração PHPmyadmin, no painel de controle do Xampp, botão Admin do Mysql e escolha o bando de dados mysql;
  • Execute o SQL do conteúdo do arquivo Drive:\xampp\htdocs\codeigniter\examples_database.sql - serão criadas as tabelas e os registros de teste no banco de dados.
  • no browser, carregue a página: http://localhost/codeigniter/index.php/examples
  • se as configurações citadas no artigo do CodeIgniter estiverem corretas, será exibida a linha: Customers | Orders | Products | Offices | Employees | Films
  • clicando nos itens, será mostrada a grade de consulta do item selecionado.

Download das versões utilizadas

CodeIgnitergrocery CRUD logo

------------------------------------------
Arquivos utilizados (GoogleDrive): aqui
 ------------------------------------------

Editor PHP

Appcelerator aptana


Permite criar projetos PHP para edição e até testes.
Uma dica é localizar a pasta htdocs na guia Project Explorer, clicar com botão direito e escolher Promote to Project, que será guardado no Workspace facilitando a navegação para edições. Utilizei o Aptana Studio 3, build: 3.4.0. Excelente freeware. site
EllisLab text mark
CodeIgniter
CodeIgniter - PHP Application Development Framework

Iniciei há alguns dias o uso do CodeIgniter, um kit de ferramentas para PHP. Promete a aceleração do desenvolvimento em PHP, com um excelente desempenho e ainda permite a utilização do Design Patern MVC para desenvolvimento. Na verdade, comecei a utilização devido à necessidade de agilização no desenvolvimento de rotinas CRUD com o GroceryCRUD, que utiliza o Framework CodeIgniter.

A dor de cabeça que me fez perder dois dias foi a configuração correta do CodeIgniter no Xampp:

A Database Error Occurred

Error Number: 1046
No database selected
SELECT * FROM (`users`)
Filename: D:\xampp\htdocs\codeigniter\system\database\DB_driver.php
Line Number: 330

Descompactando o Codeigniter para a pasta Drive:\Xampp\htdocs\codeigniter\, a única configuração que tive que fazer foi em  Drive:\xampp\htdocs\codeigniter\application\config\database.php.
Mantendo tudo original no Xampp (mysql sem senha, nesse caso), a alteração foi a seguinte:

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'mysql';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
 


simplesmente foi colocar o username e database corretos, pois o restante está como no original.
Feito isso, o erro desapareceu e um dos tutoriais que fazia acesso ao Mysql funcionou perfeitamente de primeira.

quinta-feira, 30 de maio de 2013

Portable Apps


Achei o Xampp utilizando o aplicativo deste site. Muitos aplicativos portáteis disponíveis através dele, inclusive ferramentas para desenvolvimento. Acaba no final sendo o menu que acessa todos os outros, permitindo que localize e baixe os programas também. Acesse http://http://portableapps.com/. Tudo freeware. Amazing.