I cicli in Python 3 - estratto dal corso "Didattica dell'informatica e del Coding Responsabile"
Per il video Sito web https://www.giuseppesportelli.it
per i corsi online
Sito web https://www.corsi-on-line.it/moodle
I cicli in Python 3 - estratto dal corso "Didattica dell'informatica e del Coding Responsabile"
Per il video Sito web https://www.giuseppesportelli.it
per i corsi online
Sito web https://www.corsi-on-line.it/moodle
Slide presentate all'IPW2011, riguardanti le classi Crypt::FNA e Crypt::FNA::Async pubblicate su CPAN.
Oltre ai metodi per cifrare e decifrare files e scalari, sono descritte anche le novità intercorse da YAPC::EU::2010 ovvero:
1. attributo 'salted': sale crittografico in Crypt::FNA (e quindi su Crypt::FNA::Async)
2. metodo 'mac': implementazione di un algoritmo digest in FNA
3. classe: Crypt::FNA::Async per il calcolo parallelo mediante i threads.
Algoritmi e Programmazione Avanzata - Esercizi propedeuticiSergio Porcu
Argomenti trattati:
- inserimento di un elemento in un vettore
- visualizzazione di un numero binario di n bit
- inserzione in lista ordinata
- fusione di array
- simulazione del gioco della vita
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsioneSergio Porcu
Argomenti trattati:
- calcolo di una potenza (di sistema, iterativo e ricorsivo)
- heapsort
- insertion sort
- merge sort
- quicksort
- otto regine
- dama cinese
- torre di Hanoi
- tour del cavaliere
- anagrammmi
- MCD secondo Euclide
Lo scopo di questa Tesi è mostrare come le piattaforme Arduino e Android possano essere utilizzate in un sistema di Ambient Intelligence per il monitoraggio dei sensori e l'interazione con gli attuatori.
La prima parte del lavoro è stata quella di progettare e sviluppare con l’hardware e il software fornito da Arduino le schede necessarie per il sistema:
• Una scheda per il monitoraggio ambientale, attraverso la lettura di quattro sensori (temperatura, umidità, luce, gas) (vedi figura a lato);
• Una scheda per la presenza all’interno della stanza attraverso un lettore di tag RFID e NFC, un sensore di movimento PIR e un sensore di suono ad alta sensibilità che comunicano i loro dati con un modulo ZigBee;
• Una scheda per la comunicazione ZigBee;
• Una scheda per gli attuatori e per il riconoscimento di dispositivi Android attraverso un USB Host.
Queste schede sono state installate in una Wireless Sensor Network (WSN) e comunicheranno con un server creato ad hoc attraverso tecnologie wireless e wired. Il server ha il compito di elaborare i dati grezzi che arrivano dalle schede, salvarli in un database, renderli disponibili a un client web che li possa visualizzare attraverso un’interfaccia (saranno rappresentati i dati letti delle ultime ore attraverso dei grafici) e di mettere a disposizione servizi utili per interrogazioni da parte di dispositivi Android.
Un altro servizio implementato è stato quello di un modulo software con il quale, attraverso una rete di Bayes per l’auto apprendimento appositamente creata per il progetto, è possibile prevedere lo stato della stanza in basa alla lettura dei sensori/dispositivi sopra elencati. Tale modulo è in grado di rilevare se c’è un incendio, se c’è un intrusione, ma anche se c’è attività lavorativa di una singola persona o se c’è una conferenza oppure se c’è una condizione anomala per cui bisogna azionare determinati attuatori. Attraverso la lettura di eventi di basso livello (sensori, tag di utenti entrati nel locale, ecc), il modulo riesce a prevedere con buona probabilità quale è lo stato della stanza in quel momento.
L’interfaccia utente del sistema è raggiungibile via Web attraverso una pagina presente sul server, oppure attraverso un’applicazione Android (vedi figura a lato) che permette di visualizzare i dati letti dai sensori, di ricevere notifiche push in caso di eventi di alto livello (rilevati dai moduli sopra descritti), attraverso il servizio Google Cloud Messaging, o azionare gli attuatori in remoto.
Slide presentate all'IPW2011, riguardanti le classi Crypt::FNA e Crypt::FNA::Async pubblicate su CPAN.
Oltre ai metodi per cifrare e decifrare files e scalari, sono descritte anche le novità intercorse da YAPC::EU::2010 ovvero:
1. attributo 'salted': sale crittografico in Crypt::FNA (e quindi su Crypt::FNA::Async)
2. metodo 'mac': implementazione di un algoritmo digest in FNA
3. classe: Crypt::FNA::Async per il calcolo parallelo mediante i threads.
Algoritmi e Programmazione Avanzata - Esercizi propedeuticiSergio Porcu
Argomenti trattati:
- inserimento di un elemento in un vettore
- visualizzazione di un numero binario di n bit
- inserzione in lista ordinata
- fusione di array
- simulazione del gioco della vita
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsioneSergio Porcu
Argomenti trattati:
- calcolo di una potenza (di sistema, iterativo e ricorsivo)
- heapsort
- insertion sort
- merge sort
- quicksort
- otto regine
- dama cinese
- torre di Hanoi
- tour del cavaliere
- anagrammmi
- MCD secondo Euclide
Lo scopo di questa Tesi è mostrare come le piattaforme Arduino e Android possano essere utilizzate in un sistema di Ambient Intelligence per il monitoraggio dei sensori e l'interazione con gli attuatori.
La prima parte del lavoro è stata quella di progettare e sviluppare con l’hardware e il software fornito da Arduino le schede necessarie per il sistema:
• Una scheda per il monitoraggio ambientale, attraverso la lettura di quattro sensori (temperatura, umidità, luce, gas) (vedi figura a lato);
• Una scheda per la presenza all’interno della stanza attraverso un lettore di tag RFID e NFC, un sensore di movimento PIR e un sensore di suono ad alta sensibilità che comunicano i loro dati con un modulo ZigBee;
• Una scheda per la comunicazione ZigBee;
• Una scheda per gli attuatori e per il riconoscimento di dispositivi Android attraverso un USB Host.
Queste schede sono state installate in una Wireless Sensor Network (WSN) e comunicheranno con un server creato ad hoc attraverso tecnologie wireless e wired. Il server ha il compito di elaborare i dati grezzi che arrivano dalle schede, salvarli in un database, renderli disponibili a un client web che li possa visualizzare attraverso un’interfaccia (saranno rappresentati i dati letti delle ultime ore attraverso dei grafici) e di mettere a disposizione servizi utili per interrogazioni da parte di dispositivi Android.
Un altro servizio implementato è stato quello di un modulo software con il quale, attraverso una rete di Bayes per l’auto apprendimento appositamente creata per il progetto, è possibile prevedere lo stato della stanza in basa alla lettura dei sensori/dispositivi sopra elencati. Tale modulo è in grado di rilevare se c’è un incendio, se c’è un intrusione, ma anche se c’è attività lavorativa di una singola persona o se c’è una conferenza oppure se c’è una condizione anomala per cui bisogna azionare determinati attuatori. Attraverso la lettura di eventi di basso livello (sensori, tag di utenti entrati nel locale, ecc), il modulo riesce a prevedere con buona probabilità quale è lo stato della stanza in quel momento.
L’interfaccia utente del sistema è raggiungibile via Web attraverso una pagina presente sul server, oppure attraverso un’applicazione Android (vedi figura a lato) che permette di visualizzare i dati letti dai sensori, di ricevere notifiche push in caso di eventi di alto livello (rilevati dai moduli sopra descritti), attraverso il servizio Google Cloud Messaging, o azionare gli attuatori in remoto.
Tesi magistrale in ingegneria informatica
Progettazione e sviluppo di un gateway per la gestione efficiente a servizi e risorse per l'accesso locale e remoto in scenari di Internet of Things attraverso tecniche di Cloud Computing
Corso di 20 ore sulla piattaforma Arduino. Corso tenuto nelle scuole superiori di San Secondo e Fornovo come corso di aggiornamento per il personale docente. Il corso si suddivide in 5 lezioni dove vengono spiegate più o meno tutte le funzionalità della piattaforma. I file li potete trovare al seguente indirizzo https://github.com/loweherz/ArduinoLessons
Introduzione ad arduino e raspberry. Lezione svolta presso l'Università degli studi di Parma durante il corso di sistemi di automazione. Con questa lezione si vogliono introdurre le due piattaforme e darne i contenuti essenziali per iniziarle ad usare. Inoltre vengono mostrati alcuni progetti da me svolti con questi due device.
This is a basic implementation of the famous game Arkanoid running on a FPGA that I've developed for the final project of Electronic II FPGA course at the University of Trieste.
The development board I've used is TERASIC DE1 with Cyclone II FPGA by Altera.
Features:
- 6 different angles of impact for the sphere.
- The ball striking a brick causes the brick to disappear.
- When all the bricks are gone, the player has won.
- Some bricks are indestructible.
- The Player has 3 lives to win the game.
- Start/Pause and restart game button.
For More Informations and for the english version look at this: http://www.vuolsavest.net/t3o/arkanoidFpga/
2. Encoder con pic 16f84
Nella puntata precedente, è stata presentato un piccolo
programmino per far comparire il numero 7 su un
display a 7 segmenti.
In questo file, si riprende lo stesso programmino per
creare però un Encoder. Il programma precedente
verrà quindi ampliato
Stavolta però, sarà necessario conoscere alcuni registri
La prima parte del programma verrà scritta nella slide
successiva e, si farà riferimento ai registri tramite i
rispettivi indirizzi senza associare ad essi un nome
3. Prima parte del programma
Encoder
LIST p=16f84
radix dec ; direttiva che indica che i dati sono in base dieci se non è specificata la
;base
BSF 0x03 0x05 ;pone 1 il V bit di status per selezionare bank1
MOVLW 0xff
MOVWF 0x85 ;085h è il registro TRISA
CLRW
MOVWF 0x86 ;086h è il registro TRISB
4. Seconda parte del
programma:illustrazione
Per poter creare un encoder, bisogna acquisire dei valori in
formato binario dall’esterno per poter poi visualizzare su
un display a 7 segmenti i rispettivi valori in base dieci.
La port_a è stata dichiarata di input; una sequenza di livelli
logici stabiliti da interruttori sui pin RA0…RA3
rappresentano un numero binario.
Con un solo display a 7 segmenti a c.c., si possono
visualizzare numeri da 0 a 9 e quindi, bastano quattro bit
Es se RA0=0, RA1=1, RA2=0,RA3=0, il numero binario è
0010 che corrisponde a 2 base dieci
Nella seconda parte del programma sarà necessario
introdurre una subroutine e una tabella
5. Seconda parte del programma
bcf 0x03, 0x05 ;azzero il V bit per tornare al bank0
S1: MOVF 0X05,W ; S1 è una label che indica l’inizio di una subroutine
; la prima riga della subroutine indica che il valore
;acquisito in oo5h, PORTA, viene passato in W
ANDLW 0X0F ;adesso, i dati acquisiti sono visti come dati binari e sono solo i bit più bassi
; vengono presi in considerazione
CALL TABLE ; chiama una subroutine detta table
MOVWF 0X06 ;aggiorna l’uscita PORTB
GOTO S1
TABLE ADDWF 0X02,f esegue la somma tra il valore del program counter (indirizzo 002h) al valore in W
;in questo modo, non viene eseguita l’istruzione successiva ma quella del nuovo indirizzo in pc
RETLW b’01111111’ ;return with literal w
RETLW b’00001010’
RETLW b’01111111’
RETLW b'10011111'
RETLW b'11001101'
RETLW b'11011011'
RETLW b'11111011'
RETLW b'00001111'
RETLW b'11111111'
RETLW b'11001111‘
END
6. Un piccolo schema circuitale
RBO
.
.
.
.
.
.
.
.
.
RB7
R=8x220
a
b
c
d
e
f
g
Corrispondenza tra
pin RB e segmenti
del display
RB1 a
RB2 b
RB3 c
RB4 d
RB5 e
RB6 f
RB7 g
RB0 h
RA0
.
.
RA3
7. I registri:introduzione
Per poter comprendere meglio il programma, bisogna conoscere i registri del
pic in questione
I registri del pic 16fxx si dividono in due banchi: bank0 e bank1
I registri speciali del bank0 vanno dall’indirizzo 00h 0Bh; i registri speciali del
bank1 vanno dall’indirizzo 80h a 8Bh
Per indirizzare i registri del bank0 c’è bisogno al massimo di 4 bit perché
l’indirizzo più grande, 0Bh, corrisponde a (11)10=(1011)2
Per il bank1, gli indirizzi occupano massimo 8 bit perché il più grande,
8Bh=(10001011)2=(139)10
Per poter utilizzare questi indirizzi in una riga di programmi, non dobbiamo
sforare i 14 bit. Ciò dipende anche dall’opcode che dobbiamo utilizzare
L’opcode, non sempre compare da solo in una linea programma ma, può essere
scritto con un indirizzo dati, indirizzo registri o con un dato numerico. Il tutto
non deve superare 14 bit di memoria per linea di programma
Può capitare che in una linea programma l’opcode insieme all’indirizzo del
registro supera la memoria di 14 bit; ciò può capitare solo se i registri fanno
parte del bank1
8. I registri: bank0 e bank1
Bisogna immaginare i registri come se fossero scritti in una tabella di più righe e più colonne.
Nel caso dei pic 16f628,pi16f84… i banchi sono 2, bank0 e bank1. Le colonne saranno allora solo 2, bank0 per la prima
colonna e bank1 per la seconda colonna.
Per risparmiare memoria nell’indirizzamento di un registro basta far riferimento solo alla riga, dopo aver specificato la
colonna in questione
Esistono due tipi di comandi per selezionare bank0 e bank1: BSF 0x03,5 e BCF 0x03,5
BSF= Bit Set f; questo comando pone a 1 un bit del registro in questione. Nel nostro caso pone a 1 il bit 5 del registro di
indirizzo 3h, detto registro STATUS che fa parte del bank0. Il bit 5, detto RP0, è quello che indirizza il bank0 o il bank1.
Se RP0=0, il bank selezionato è zero, se RP0=1, il bank selezionato è 1
BCF= Bit Clear f; ; questo comando pone a 0 un bit del registro in questione. Nel nostro caso pone a 0 il bit 5 del
registro di indirizzo 3h selezionando il bank0
vf
Bank0 Bank1
indirizzo registro indirizzo registro
00h INDF 80h INDF
01h TMR0 81h OPTION
02h PCL 82h PCL
03h STATUS 83h STATUS
04h FSR 84h FSR
05h PORTA 85h TRISA
06h PORTB 86h TRISB
…….. …………… …. ………………….
9. Esempio:altro modo per
indirizzare TRISA e TRISB
Un modo alternativo per scrivere la prima parte del programma precedente è il seguente:
ORG 0X00
MOVLW 0XFF
TRIS 0X05 ;l’istruzione TRIS fa parte di istruzioni speciali; a questo comando è associato sempre l’indirizzo di PORT
A, PORT B..
; con esso non vengono settati i livelli logici delle porte ma solo la direzione. Ciò vuol dire che quando si
utilizza TRIS, si ;fa riferimento ai registri TRIS A e TRISB del bank1. In questo caso, il riferimento è a TRISA all’indirizzo
0x85
CRLW
TRIS 0X06 ;il dato 0x00 nell’accumulatore viene trasferito al registro TRISB portando tutte i bit di B come OUTPUT
MOVF 0x86,W
……………………………………………il resto del programma è uguale al precedente
10. Registro STATUS
Si trova all’indirizzo 03h e, i bit che lo compongono sono dei veri e propi flag
Bit 0 flag di Carry/Barrow. Segnala un riporto/ prestito nelle operazioni di somma e sottrazione su otto bit
Bit 1 flag di Digit Carry/Barrow. Segnala un riporto/prestito sul nibble basso nelle operazioni di somma e
sottrazioni.
Bit 2 flag di zero : è 1 se il risultato dell’operazione logico/aritmetica precedente è zero altrimenti è 0
Bit 3 flag di Power Down, va a 1 durante la temporizzazione di power-up o nell’istruzione di azzeramento del
Watch dog ,CLRWDT; durante l’istruzione di SLEEP, istruzione di attesa, viene riportato a zero
Bit 4 flag di Time out, va a 1 durante il power Out o per CLRWDT. Il bit 4 con il bit 3 sono i bit di STATUS che
non possono essere scritti ma solo letti
Bit 5 e bit 6 sono quelli che selezionano i banchi. Se entrambi 0, siamo nel bank0, se RP0=1 e RP1=0, allora
siamo nel bank1. Altre combinazioni di RP0 e RP1 sono utili solo in caso di pic con un numero di banchi
superiori
Bit 6 non è utilizzato nel caso di pic 16f84 e pic16f628. Serve per l’indirizzamento indiretto. Verrà approfondito
più avanti
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
IRP RP1 RP0 TO PD Z DC C
11. Il registro PCL
Nella seconda parte del programma compare il program counter all’indirizzo
002h. Questo registro si aggiorna ogni volta che viene eseguita una nuova
operazione. In esso è scritto l’indirizzo dell’istruzione successiva da eseguire. È
un registro a 13 bit di cui, gli 8 bit meno significativi, si trovano all’indirizzo
002h, i 5 più significativi in un altro indirizzo detto PCLATH all’indirizzo 0Ah
Il program counter è utile nelle istruzioni di salto.
Ogni volta che c’è un’istruzione di salto GOTO n o CALL, il PC assume il valore
dell’indirizzo di istruzione di salto ponendo il valore dell’istruzione successiva
nello stack. Terminata l’istruzione di salto (subroutine), il PC acquisisce dallo
stack l’indirizzo dell’istruzione dove si era interrotto per ritornare
all’esecuzione normale del programma
In corrispondenza dell’istruzione ADDWF 0X02,f il PC ha valore 0X0A che è
l’indirizzo dell’istruzione successiva.
Ma, in seguito all’istruzione di riga, il PC assume il valore del risultato della
somma tra il contenuto di w e quello di PC.
Questo nuovo risultato è l’indirizzo del contenuto della tabella
Eseguita l’istruzione, il programma ritorna all’istruzione dove si era interrotto
12. Esecuzione del programma passo
passo
Indiririzzo
istruzione
PC istruzione Registro Stato bit nel registro
000 0x01 MOVLW 0xff W 1 1 1 1 1 1 1 1
001 0x02 MOVWF 0x85 TRISA 1 1 1 1 1 1 1 1
002 0x03 CLRW W 0 0 0 0 0 0 0 0
003 0x04 MOVWF
0x86
TRISB 0 0 0 0 0 0 0 0
004 0x05 MOVF
0X05,W
W 0 0 0 0 0 0 1 1
005 0x06 ANDLW
0X0F
W 0 0 0 0 0 0 1 1
006 0x07 CALL TABLE
009 0x0A ADDWF 0X02
,1
pcl 0 0 0 0 1 1 0 0
00d 0x07 RETLW w 1 0 0 1 1 1 1 1
007 0x08 PORTB PORTB 1 0 0 1 1 1 1 1
008 0x04 GOTO S1
Abbiamo supposto che
l’ingresso su port a sia 11 binario.
00D=00A+003
00A è il contenuto del program counter, 003 è l’ingresso in formato decimale
che viene inserito su RA in formato binario.
Il programma non esegue l’istruzione in 00A ma quella in 00D
13. Retlw
Nella slide precedente, si è visto che l’istruzione ADDWF
0X02, 1 somma il contenuto di W con quello del PC, di
indirizzo 0x02 e, pone il risultato nel PC
In questo modo, il program counter ha l’indirizzo nuovo
che corrisponde a 0x0d dove c’è l’istruzione RETLW
10011111
Retlw scarica dallo stack l' indirizzo di ritorno salvato
dalla call e rientra ponendo in W il suo contenuto
Questo contenuto viene trasferito in PORTB che setta i
livelli logici delle uscite RB per far accendere determinati
segmenti del display a sette segmenti a c.c. In questo caso,
il numero 3
14. In conclusione
Per questo programma è stato necessario conoscere i
seguenti registri:
W
PC bank0 0x02
PORTA bank0 0x05
PORTB bank0 0x06
TRISA bank1 0x85
TRISB bank1 0x86
STATUS bank0 0x03