Pages: 1 ... 12 13 [14] 15 16 ... 36   Go Down
Author Topic: Topic permanente di programmazione newbie  (Read 30481 times)
0 Members and 1 Guest are viewing this topic.
Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 124
Posts: 9331
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

in effetti, lato hw sono belli semplici da iplementare, ma io ne ho trovati alcuni con una sintassi assurda (vedi flamingo eda e simili) che dal lato sw incasinano un pò la vita.

Vero, ne so qualcosa perché ho realizzato questo display seriale, multinterfaccia con varie funzioni aggiuntive, abbiamo scelto di renderlo compatibile con il set di comandi di Matrix Orbital, sono i più diffusi, e non è stata una passeggiata  smiley

video dimostrativo delle capacità della MuInLcd abbinata ad Arduino:


Quote
a quando il vKeypad?  smiley-mr-green

Magari una volta finito vLcd  smiley
« Last Edit: March 11, 2012, 04:35:16 am by astrobeed » Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

vero, matrix orbital e crystalfontz sono quasi legge smiley-grin meglio quelli...
Bellissimo prodotto il display che hai linkato, ricomplimenti smiley-wink
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 564
Posts: 12459
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Rispondo a tutti per punto, sperando di non dimenticare nessuno:
@ Astro
Quote
Il menù dovrebbe essere sempre una funzione, e i sottomenù altre funzioni,
ok, ci rimettero mano dopo aver completato il firmware e messo al sicuro, anche se ho risolto facendo direttamente la lettura dei fuse, che esce sotto i valori di default; quindi in menu restano: caricamento anti-bricked, fuse personalizzati, ERASE micro; e dopo ogni operazione obbligo a togliere il micro resettare la board per riavviare. Una complicazione mi è data dal fatto che se avvio la seriale con un micro inserito mi esce bordello, quindi inutile ammazzarmi ad eseguire più comandi
Quote
Hyperterminal di windows per cancellare lo schermo va inviato prima 0x27, è l'escape, e poi i caratteri "[2J"
Spiegami come fare questa cosa, l'articolo prevede lato PC proprio l'uso di Win HyperTerminal, quindi del serial monitor non mi interessa molto.
Quote
controllo forzato di RTS, questo serve solo a Michele per il momento,
vero, e ti ringrazio, ma una volta che si diffonderà l'uso dell'MCP2200 che dopo gli ultimi test di Leo resta ormai l'unica alternativa hobbystica a FT232RL e ATmega8u2, tornerà utile a molti.
Quote
infatti sto valutando se inserire un comando per disattivare il reset.
basta che sia opzionale; nei casi come i miei il reset è indispensabile per lanciare il menu.
@amario57
Quote
Non mollare ...., sono in attesa della tua "opera"
come mollare? smiley-eek è un lavoro che sto facendo per Elettronica In che metterà gratuitamente a disposizione sia il firmware che i gerber dei 3 PCB, naturalmente dopo che uscirà l'articolo sulla rivista. Ci sto lavorando notte e giorno ormai smiley-sweat grazie per l'incitamento smiley-lol. Ti vedo parlare sempre di didattica, siamo colleghi?
@ BB
Quote
ma  usi un lcd seriale vero? o ricordo male
Nel senso stretto del termine sì, in realtà uso un altro mega328 a cui ho collegato la key esadecimale ed un comune LCD parallelo (4 bit); stanno su un PCB specifico ed il 328k&d è collegato al 328master via seriale, quindi comunico in seriale bidirezionale tra i due micro 328.
« Last Edit: March 11, 2012, 05:50:29 am by menniti » Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 124
Posts: 9331
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Spiegami come fare questa cosa, l'articolo prevede lato PC proprio l'uso di Win HyperTerminal, quindi del serial monitor non mi interessa molto.

Se usi Hyperterminal allora la cosa è semplice, aggiungi in testa alle funzioni che visualizzano il menù questa riga:

Code:
Serial.print("\033[2J");  // erase monitor
Logged

BG (I)
Offline Offline
Full Member
***
Karma: 0
Posts: 202
Usus plura docet
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

OT
@amario57
Quote
Non mollare ...., sono in attesa della tua "opera"
come mollare? smiley-eek è un lavoro che sto facendo per Elettronica In che metterà gratuitamente a disposizione sia il firmware che i gerber dei 3 PCB, naturalmente dopo che uscirà l'articolo sulla rivista. Ci sto lavorando notte e giorno ormai smiley-sweat grazie per l'incitamento smiley-lol. Ti vedo parlare sempre di didattica, siamo colleghi?
[/quote]

In un certo senso si, sono un consulente che si occupa anche di formazione nelle scuole.
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 124
Posts: 9331
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ecco la relase 1.0 beta del tutto, scaricabile qui.
All'interno del file rar c'è sia la nuova versione dell'eseguibile per pc che la libreria per Arduino, la cartella vLcd va copiata dentro la cartella delle librerie di Arduino.
Nella cartella examples della libreria c'è un semplicissimo sketch di esempio che riporto più sotto.
Alla fine ho optato per gestire tutto quanto dal programma per pc invece che da Arduino perché sarebbe stato necessario creare in ram un buffer da 80 byte per simulare la memoria interna del display, cosa assolutamente inaccettabile viste le limitate risorse del micro.
Visto quanto sopra ho abbandonato l'idea iniziale di clonare le classi della libreria liquidcrystal, anche perché sarei rimasto limitato alle sue funzionalità mentre il display virtuale può fare molto di più, e ho creato una libreria ex novo composta da una collezione di funzioni con nomi molti simili a quelli utilizzati dalla liquidicrystal, ma con il vantaggio di non essere limitato nelle espansioni future e con un impegno veramente minimo di flash e ram, solo pochi byte per quest'ultima.
Attualmente sono disponibili tre funzioni:

vLcdInit(); // inizializza la libreria e la porta seriale a 115200 bps
vLcdClear(); // cancella il display e posiziona il cursore alla prima colonna della prima riga
vLcdSetCursor(riga, colonna); // posiziona il cursore sulla riga (0-3) e colonna (0-39) desiderata

Tutto quello che viene inviato tramite la  Serial.print() viene visualizzato sul display partendo a scrivere dalla posizione corrente del cursore e andando automaticamente a capo alla fine della riga, se si supera l'ultimo carattere dell'ultima riga la scrittura riparte dalla prima posizione andando a sovrascrivere quanto già presente.
Prossimamente nuove funzioni per la libreria come la cancellazione delle singole righe, e non di tutto il display, lo scrolling per righe o per tutto il display, etc.

Code:
#include "vLcd.h"; // Libreria vLcd

void setup()
{
  vLcdInit();  // inizializza la porta seriale (115200 bps)
  vLcdClear(); // cancella display

  Serial.print("12345678901234567890");
  Serial.print("abcdefeghijklmnopqrs");
  Serial.print("prova prova prova pr");
  Serial.print("test test test");
  
  delay(1000);
  vLcdClear();
  delay(1000);
  vLcdSetCursor (2,3);  // sposta il cursore
  Serial.print("123456789012345678");
  //Serial.print("abcdefeghijklmnopqrs");
  //Serial.print("prova prova prova pr");
  //Serial.print("test test test");
}

void loop()
{
 
}
« Last Edit: March 11, 2012, 01:10:26 pm by astrobeed » Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 564
Posts: 12459
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Beh, il lavoro è eccezionale se lo consideriamo come GUI per svariati usi, ma mi viene il dubbio che alcune delle funzioni che hai elencato non siano presenti negli LCD veri, o almeno nella libreria liquid.....
Mi riferisco p.es. al fatto che nomalmente la lib lascia intatto il comportamento della ram dell'LCD (non badare a inesattezze tecniche, cogli il succo smiley-grin) per il quale se mandi 80 caratteri, i primi 20 riempiono la prima riga, i secondi vanno a capo ma sulla terza riga, poi la seconda e quindi la quarta; io non ricordo di un autoscorrimento sulla stessa riga, mentre la canbcellazione è un discorso a parte, con la tecnica brutale descritta da BB si fa qualsiasi cosa, a prescindere dall'eleganza software.
In definitiva io adotterò il tuo software, ma poi mi sa che la cosa mi servirà poco (se i miei timori sono fondati) per lo stand-alone, dove dovrò riprogrammare tutto ex-novo in quanto le caratteristiche non sono più quelle di un virtual LCD, come doveva essere, ma di un prodotto finito a tutti gli effetti con proprie eccellenti peculiarità
Ho detto strunzate o ho ragione?
Io oggi non ho combinato nulla, la preparazione degli esami dei prox due giorni mi ha portato via un sacco di tempo, poi sono andato in lab ma solo per sistemare bene la meccanica "volante" dell'HV; inoltre dovendo ora procedere con l'erase ho recuperato un Arduino e il programmatore ISP, altrimenti come faccio a sapere se ho davvero cancellato tutto o se mi sto perndendo per il c da solo, come un deficiente smiley-sad-blue? A dopo.
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 124
Posts: 9331
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi riferisco p.es. al fatto che nomalmente la lib lascia intatto il comportamento della ram dell'LCD (non badare a inesattezze tecniche, cogli il succo smiley-grin) per il quale se mandi 80 caratteri, i primi 20 riempiono la prima riga, i secondi vanno a capo ma sulla terza riga, poi la seconda e quindi la quarta;

Quello che fai fare al display dipende solo dal software che lo controlla e non dal display stesso, comunque anche la liquidcrystal ha funzioni per lo scroll delle righe sia destra che a sinistra.
Se invii caratteri di seguito il vLcd continua a scrivere andando a capo in automatico, quindi se parti dalla locazione 0 dopo 80 caratteri è pieno.
Mi sono scordato di scriverlo prima, la libreria funziona sia con l'IDE 0022-0023 che con l'IDE 1.0.
Logged

BG (I)
Offline Offline
Full Member
***
Karma: 0
Posts: 202
Usus plura docet
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scaricata e nei prossimi giorni la testo poi riferirò.
Bel lavoro.
Non è meglio creare un topic apposito astro ?.  smiley-roll
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 564
Posts: 12459
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ha detto che l'avrebbe fatto con la versione 1.0 definitiva.
Per ora, visto che appena finito l'erase, sarà la mia prossima implementazione sul software, forse non conviene, ma per me è uguale, chiedere qui o altrove, basta far funzionare tutto smiley-grin
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 124
Posts: 9331
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Non è meglio creare un topic apposito astro ?.  smiley-roll

Si, non appena ho la versione 1.0 definitiva, per il momento è ancora una beta, apro un topic dedicato, salvo imprevisti sarà tra qualche giorno con la libreria arricchita da nuove funzioni.

Logged

0
Online Online
Faraday Member
**
Karma: 46
Posts: 5851
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

logicamente sara' tutto open, sto' preparando anche un po' di documentazione perche' su quel coso non si trova nulla.
Ecco il lavoro promesso, nello zip ci sono i datasheet, lo schema di connessione e molti esempi
 smiley
- [LIBRERIA] ST7032i LCD I2C Controller Library
http://arduino.cc/forum/index.php/topic,96163.0.html
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 124
Posts: 9331
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Nuova beta release (1.0.4 beta) del display lcd virtuale scaricabile qui.
Oltre ad avere aggiunto tre nuovi comandi alla libreria, vedere sotto il dettaglio, ho rifatto il parser dei comandi rendendolo più affidabile e versatile, inoltre ora è presente il tasto reset, consente di riavviare a piacere Arduino, vengono azionati sia DTR che RTS, e il tasto info che fornisce la versione e altre informazioni.

Elenco dei comandi supportati:

vLcdInit();      // inizializza la libreria e la porta seriale (115200 bps)
vLcdClear();   // cancella il display e posizione il cursore alla prima colonna della prima riga
vLcdSetCursor (Riga, Colonna);  // posizione il cursore sulla desiderata riga e colonna.
vLcdNoDisplay(); // spegnimento del display (sia caratteri che retroilluminazione)
vLcdDisplay();     // accensione del display
vLcdHome();       // posizione il cursore alla prima colonna della prima riga, non viene cancellato il display

La prossima release sarà la 1.0 definitiva e includerà nuovi comandi.

Sketch di esempio, usa tutti i comandi, è allegato nella cartella examples della libreria.
Code:
#include "vLcd.h"; // Libreria vLcd

void setup()
{
  vLcdInit();  // inizializza la porta seriale (115200 bps)
  vLcdClear(); // cancella display

  Serial.print("12345678901234567890");
  Serial.print("abcdefeghijklmnopqrs");
  Serial.print("prova prova prova pr");
  Serial.print("test test test test");
 
  delay(1000);
  vLcdClear();
  delay(1000);
  vLcdSetCursor (1,3);  // sposta il cursore
  Serial.print("123456789012345678");
  delay(1000);
  vLcdHome();
  Serial.print("test test test test");
  delay(1000);
  vLcdNoDisplay();
  delay(1000);
  vLcdDisplay();
}

void loop()
{
 
}
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 564
Posts: 12459
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bene, bene, io purtroppo con gli esami sono piuttosto incasinato, infatti ancora sono in arretrato con l'erase, ma subito dopo farò un po' di test. Grazie Astro!
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 124
Posts: 9331
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bene, bene, io purtroppo con gli esami sono piuttosto incasinato, infatti ancora sono in arretrato con l'erase, ma subito dopo farò un po' di test. Grazie Astro!

Ieri sera stavo riflettendo sulla possibile evoluzione del vLcd per renderlo qualcosa di più di una semplice emulazione di un LCD alfanumerico reale con tutte le relative limitazioni.
Tra i vari widget che ho a disposizione per la realizzazione di GUI, cosa che faccio spesso come complemento ai miei lavori, ne ho uno che simula un pannello lcd grafico senza limiti, salvo le dimensioni del monitor, ai pixel che lo compongono, mi consente di utilizzare vari effetti speciali come il blinking di un gruppo di caratteri e/o colorarli a piacere e altre cosette.
Una volta chiuso il discorso vLcd, e mi manca poco per farlo, vorrei usare il pannello grafico per realizzare una sorta di monitor virtuale a colori sul quale scrivere tramite Arduino utilizzando una serie di funzioni di uso immediato che consentono di posizionare a piacere scritte e dati, con tanto di caratteri speciali presenti nel font in uso, cosa non possibile con il widget per gli lcd alfanumerici, e relativi effetti speciali.
In pratica sarà una cosa con comandi simili a vLcd, ma con molte possibilità in più e senza limiti di dimensioni, p.e. sarà possibile organizzarlo come 20 righe da 40 caratteri direttamente da Arduino tramite un apposito comando, in questo modo dovrebbe diventare molto semplice realizzare GUI generiche per Arduino senza dover scrivere una sola riga di codice sul PC, cosa che a molti crea non pochi problemi.

Logged

Pages: 1 ... 12 13 [14] 15 16 ... 36   Go Up
Jump to: