In un precedente post avevo gia' affrontato il problema ...leggendo su codebase64 viene proposta una variante che usa delle tabelle di lookup per velocizzare il programma ma non viene presentato il codice completo. Questa e' una implementazione
sabato 29 gennaio 2022
Setpixel su C64 (2)
giovedì 27 gennaio 2022
Visual Code Assembler C64
Qualche tempo fa avevo provato CBM Prg Studio ma aveva diverse limitazioni (la prima fra tutte girare solo su Windows)
Per una soluzione multi piattaforma si puo' usare Visual Studio con l'estensione Kick Assembler 8-bit Retro Studio, Kick Assembler, Vice e C64 Debugger
Una volta installata la estensione si devono impostare nei settaggi del plugin le path dei vari componenti
Su Debian ho avuto diversi problemi con C64Debugger...installando la versione binaria viene generato il seguente errore
sudo ln -sf libxcb-util.so.0 libxcb-util.so.1
il problema e' che la libreria non e' disponibile in apt e fare un symlink semplicemente blocca X al riavvio successivo
Per installare C64debugger da sorgenti si devono seguire i passi seguenti
apt install upx-ucl
git clone git://git.code.sf.net/p/c64-debugger/code c64-debugger-codeGrandi poteri fanno grandi casini
Stavo cercando di installare un software su Linux che viene distribuito in binario e che lamentava una versione di libxcb-util che ho disponibile in apt solo alla versione precedente
M5Stack StickC
Aggiornamento
************************************************************
per allungare la durata della batteria. Al primo avvio viene solo mostrato
la grafica al video...i boot seguenti fatti a seguito di wake up da deep sleep
viene avviata la tastiera BLE
L'aspetto piu' critico e' stato quello di inserire un delay al riavvio perche' sono necessari
4 secondi per riavviare la riconnessione al Bluetooth e 4 secondi per l'invio del messaggio
(tempi piu' brevi portano a connessioni non affidabili)
#include <M5StickC.h>
RTC_DATA_ATTR int bootCount = 0;
BleKeyboard bleKeyboard;
String player = "1"; // set player 1 or player2
void setup() {
++bootCount;
if (bootCount >1 )
{
delay(4000);
bleKeyboard.begin();111
delay(4000);
if(bleKeyboard.isConnected()) {
bleKeyboard.print("1");1
}
pinMode(10, OUTPUT);
digitalWrite(10, LOW); // accende il led
delay(100);
digitalWrite(10, HIGH);
}
else
{
M5.begin();
pinMode(10, OUTPUT); // red led
digitalWrite(10, HIGH);
M5.Lcd.setRotation(3);
pinMode(37, INPUT);
M5.Lcd.setTextSize(3);
M5.Lcd.setCursor(5, 18);
M5.Lcd.print("Player "+player);
delay(1000);
M5.Axp.SetLDO2(false); // spenge lo schermo
}
esp_sleep_enable_ext0_wakeup(GPIO_NUM_37,0);//Configure GPIO37 as ext0 wake up source for low logic level
esp_deep_sleep_start();
}
void loop() {
}
************************************************************
M5Stack Stickc e' un indossabile (piu' o meno) con a bordo un Esp 32 Pico programmabile
Ha una batteria da soli 80 mAh ed in condizioni normali resta acceso meno di 10 minuti...volevo trasformarlo in un pulsante remoto come tastiera BLE HID per comandare un PC
#include <M5StickC.h> | |
#include <BleKeyboard.h> | |
BleKeyboard bleKeyboard; | |
int last_value = 0; | |
int cur_value = 0; | |
String player = "1"; // set player 1 or player2 | |
void setup() { | |
bleKeyboard.begin(); | |
setCpuFrequencyMhz(80); // downscale la frequenza da 240 a 80 Mhz | |
M5.begin(); | |
pinMode(10, OUTPUT); // red led | |
digitalWrite(10, HIGH); | |
M5.Lcd.setRotation(3); | |
pinMode(37, INPUT); | |
M5.Lcd.setTextSize(3); | |
M5.Lcd.setCursor(5, 18); | |
M5.Lcd.print("Player "+player); | |
delay(1000); | |
M5.Axp.SetLDO2(false); // spenge lo schermo | |
} | |
void loop() { | |
M5.update(); | |
delay(300); // per evitare la doppia pressione | |
cur_value = digitalRead(37); | |
if(cur_value != last_value){ | |
if(cur_value==0){ | |
if(bleKeyboard.isConnected()) { | |
bleKeyboard.print(player); | |
/*M5.Axp.SetLDO2(true); | |
M5.Lcd.fillScreen(RED); | |
delay(100); | |
M5.Lcd.fillScreen(BLACK); | |
M5.Axp.SetLDO2(false);*/ | |
digitalWrite(10, LOW); // accende il led | |
delay(100); | |
digitalWrite(10, HIGH); | |
} | |
} | |
else{ | |
} | |
last_value = cur_value; | |
} | |
} |
domenica 23 gennaio 2022
Github Pages
Github permette di ospitare delle applicazioni web oltre che il repository dei sorgenti mediante il servizio GitHub Pages
In estrema sintesi e' sufficiente creare un nuovo branch denominato gh-pages e puntare il browser all'indirizzo del progetto
dopo aver creato aver fatto il primo commit si puo' procedere con
git checkout -b gh-pages
git push https://TOKEN@github.com/c1p81/tabellone.git
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: Create a pull request for 'gh-pages' on GitHub by visiting:
remote: https://github.com/c1p81/tabellone/pull/new/gh-pages
remote:
To https://github.com/c1p81/tabellone.git
* [new branch] gh-pages -> gh-pages
domenica 16 gennaio 2022
Esplosione Hunga-Tonga-Hunga-Ha'apai registrata in Toscana
Il giorno 15 gennaio alle ore UTC 04:27 e' avvenuta l'esplosione del vulcano Hunga-Tonga-Hunga-Ha'apai alle isole Tonga
Le immagini dal satellite sono impressionanti ma ancora piu' impressionante e' che circa 16 ore quasi dalla parte opposta del mondo e a circa 17000 Km di distanza ovvero in Toscana e' stata registrato un sensibile aumento della pressione atmosferica dovuto alla propagazione dell'onda di pressione. La velocita' con tutte le approssimazioni introdotte e' quella del suono
Prendendo dati di stazioni meteo pubbliche si puo' vedere
Una anomalia del sensore?
venerdì 14 gennaio 2022
Web bluetooth e ITag
Sto facendo un po' di esperimenti con il supporto bluetooth per browser in relazione ad dispositivo ITag (non quello di Apple...la versione cinese)
ITag Anti Lost smart bluetooth tracker
Il dispositivo espone alcuni servizi .. a me interessa il Custom Service che corrisponde ad una notifica legata alla pressione del pulsante
da questo link si osserva che l'UUID del servizio e della caratteristica non e' costante tra i vari dispositivi che sono in vendita
#define SERVICE_UUID1 "0000ffe0-0000-1000-8000-00805f9b34fb" | |
#define SERVICE_UUID2 "0000fff0-0000-1000-8000-00805f9b34fb" | |
#define CHAR_UUID1 "0000ffe1-0000-1000-8000-00805f9b34fb" | |
#define CHAR_UUID2 "0000fff1-0000-1000-8000-00805f9b34fb" |
Per accendere si preme il pulsante per 3 secondi e si sente un doppio beep, per spengere sempre 3 secondi di pulsante con lungo segnale acustico. Per alcune impostazione, come la disattivazione della suoneria si puo' usare la app Kindelf per Android ed IOS
Per prima cosa c'e' da dire che non e' una passeggiata ed il supporto delle API al momento e' molto limitato ...praticamente solo Chrome
In ogni caso anche per Chrome si deve abilitare esplicitamente le API tramite
chrome://flags/#enable-experimental-web-platform-features
nonostante avere abilitato la flag non ho trovato il sistema per rendere affidabile la comunicazione tra il pulsante e il computer...inoltre c'e' da segnalare che Chrome su IOS non ha la possibilita' di abilitare questo flag (non e' presente nella lista)
Utilizzando chrome://bluetooth-internals/#adapter si puo' verificare che non tutte le funzionalita' sono ancora implementate (se si apre il widget di ricerca del sistema operativo per fare una scansione il discovering da browser diventa rosso)
questa schermata e' stata fatta su un Lenovo T470 con RHEL
Per i test ho trovato questa applicazione in ReactJS
Per installarla si inizia con
git clone https://github.com/rdeprey/web-bluetooth-starter
npm install -g create-react-app
npm install --global yarn
npm install (per scaricare le librerie collegate)
npm start (per lanciare il programma)per creare una versione da inserire in produzione si puo' digitare npm run build oppure yarn build (verra' creata una directory build in cui sono contenuti i file da mettere sul server di produzione)
Una volta avviato il programma si riesce ad ottenere la prima notifica di pressione del pulsante e subito dopo viene generato l'errore
index.js:1 Uncaught Error: The error you provided does not contain a stack trace.
at M (index.js:1:1)
at ee (index.js:1:1)
at index.js:1:1
at index.js:1:1
at l (index.js:1:1)
M @ index.js:1
ee @ index.js:1
(anonymous) @ index.js:1
(anonymous) @ index.js:1
l @ index.js:1
localhost/:1 Uncaught (in promise) DOMException: GATT Error: Not supported
Debugger integrato ESP32S3
Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede nell'ID USB della porta Jtag. Nel modulo...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...