PPTEA
PPTEA - applicazioni domotiche


FinePagina

MarKoZaKKa

Avatar
GigaWatt


Utente
Msg:1886

Stato:



Inviato il: 24/10/2011,13:03

Allora, sto iniziando a sviluppare un sistemino domotico; in attesa di avere l'hardware mi diletto a giocare col sw; mi sono sorte alcune necessità:

- conoscere lo stato delle uscite, senza dovermelo "ricordare" in una variabile apposita
- invertire lo stato di una delle uscite
- memoria di programma

la prima, ha bisogno probabilmente di implementazione nel firmware previa attenta valutazione costi/benefici; la seconda, invece abbisogna (imho) dell'operatore xor, oppure almeno del not, che però non vedo nel language reference manual, ma magari sono orbo io...
per la terza, ricordo si parlava di memoria esterna; al momento solo in un caso ho visto il fondo della memoria programma, ma si sa mai, adesso col wireless, l'appetito vien mangiando!
I guru hanno delle risposte?
Grazie!



---------------
Tecnico qualificato in clownerie
Windsurfer a tempo perso
Slalomaro senza speranze
...

 

NonSoloBolleDiA...

Avatar
PetaWatt


AMMINISTRATORE
Msg:13786

Stato:



Inviato il: 24/10/2011,14:33

Ciao Marko,
cerco di rispondere alle domande nella speranza di non scrivere cretinate...quanto prima effettuo un test e posto in questa discussione qualche esempio che gira sia sul simulatore che sul PPETA...per ora procedo in modo teorico.

1. l'istuzione INP puo' essere utilizzata lei stessa come una variabile dove il valore viene automaticamente aggiornato...quindi se non ho capito male la domanda...queta cosa già funge.
Queto è un esempio in EABASIC:
10 A=30
20 IF INP = A THEN 50
30 WAITMS 250
35 OUT=0
40 GOTO 20
50 OUT=1
55 WAITMS 250
60 GOTO 20

2.Gli operatori not e xor dovrebbero esserci in un linguaggio che sia serio...quindi se non ci fossero...li implementerò al più presto!!!! Verifico quanto prima...ora non posso!

3.La memoria per il momento è piccolina...viene indicata nel compilatore...se si sfora allora il progamma deve essere ridimensionato...per le applicazioni attuali va più che bene...se dovesse crescere l'esigenza...si farà anche quel passo.
Ciao faccine/smile.gif
Bolle



---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripet...

 

NonSoloBolleDiA...

Avatar
PetaWatt


AMMINISTRATORE
Msg:13786

Stato:



Inviato il: 25/10/2011,14:58

Allora ho implementato le funzioni : not, xor, mod ed altre ...il linguaggio ora è completo.
La nuova versione è rilasciata nella sezione relativa.
Ciao
Bolle



---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripet...

 

MarKoZaKKa

Avatar
GigaWatt


Utente
Msg:1886

Stato:



Inviato il: 25/10/2011,16:54

Faccio solo notare una cosetta:

MarKoZaKKa
Inviato il: 24/10/2011, 14:03
Allora, sto iniziando a sviluppare un sistemino domotico; in attesa di avere l'hardware mi diletto a giocare col sw; mi sono sorte alcune necessità:
....
NonSoloBolleDiAcqua
Inviato il: 24/10/2011, 15:33
2.Gli operatori not e xor dovrebbero esserci in un linguaggio che sia serio...quindi se non ci fossero...li implementerò al più presto!!!! Verifico quanto prima...ora non posso!
...
NonSoloBolleDiAcqua
Inviato il: 25/10/2011, 15:58 Se avevi tempo, era pronto dopo cinque minuti???
Allora ho implementato le funzioni : not, xor, mod ed altre ...il linguaggio ora è completo.

Neanche il tempo di rispondere al tuo post! Questa è passione! Grande!!! Grazie!

Anche se ormai è quasi inutile, posto lo stesso quello che avevo preparato in risposta...

Ciao Bolle,
per la prima questione, mi riferivo alle uscite, ovvero oltre avere l'istruzione OUT=valore,
mi chiedevo se fosse utile avere anche una OUTSTATE, che mi ritorna un byte o una word
contenente lo stato dei pin di output. Questo eviterebbe di usare una variabile per tenere
traccia dello stato delle uscite. Ad esempio, nella mia idea di applicazione domotica, un PPTEA
per stanza che gestisce pulsanti e lampade/prese, le uscite funzionerebbero come rele' passo passo,
quindi ad una prima pressione del pulsante 1, attivo l'uscita 1, ad una successiva pressione,
la disattivo, e cosi via per le altre coppie ingresso/uscita; quindi devo conoscere lo stato
delle uscite per andare ad invertire il bit relativo. (lo so, è un piccolo risparmio...)

per il secondo punto, basterebbe avere il NOT; dal compilatore non viene segnalato come errore,
a differenza dello XOR ma non funziona...
LO XOR (OR esclusivo, disuguaglianza logica) è vero quando gli ingressi sono diversi, e falso
quando sono uguali, e si puo avere solo con gli operatori base AND, NOT, OR con la formula:
A XOR B = (A OR B) AND (NOT A OR NOT B); continuando con l'esempio, per invertire l'uscita Xout
alla pressione del pulsante sulla Xin, basterebbe

X=INP
OUT=OUTSTATE XOR X

facendo un ciclo FOR su X per potenze di 2 da 1 a 128.

Per il terzo punto, avendo il NOT e lo XOR, il codice sicuramente si snellisce... devo vedere quando
inizierò a implemenare la comunicazione wireless col PPTEA master... sempre simulando, almeno fino a
quando non consegna RS, poi avrò bisogno di due dritte su come programmare il PIC per farlo diventare
un PPTEA



---------------
Tecnico qualificato in clownerie
Windsurfer a tempo perso
Slalomaro senza speranze
...

 

NonSoloBolleDiA...

Avatar
PetaWatt


AMMINISTRATORE
Msg:13786

Stato:



Inviato il: 25/10/2011,17:33

CITAZIONE (MarKoZaKKa @ 25/10/2011, 17:54)
mi chiedevo se fosse utile avere anche una OUTSTATE, che mi ritorna un byte o una word contenente lo stato dei pin di output...

Non sembri così sprovveduto come vuoi dipingerti...alla faccia del gioco.
Quello che cerchi....sempre se ho capito bene è contenuto nell'istruzione INP. I bit che vai a scrivere mediante OUT te li ritrovi nella variabile di lettura che è la INP (giro di parole ma dimmi se mi sono spiegato), inoltre ti segnala anche una variazione mediante lo xor ( anticoincidenza).

Facciamo un esempio con 3 linee di codice eab commentate:
CODICE
10 MEM_PORTE = INP
20 'CONTROLLO SE AVVIENE UN CAMBIO STATO
30 IF (MEM_PORTE XOR INP) = 0 then 30 ' la situazione è la stessa
40 ' E' variato qualche bit...
45 WAITMS 250 'Attendo l'antirimbalzo se ho a che fare con i pulsanti....non si sa mai :-)
50 GOTO 10 ' Memorizzo nuovamente il nuovo stato


Nel debug prova a modificare i bit di ingresso...e vedrai che appena varia qualcosa il programma salta alla linea 45....

Ora il debug non penso (devo verificare) mi prenda i dati di output faccine/crash.gif ( ho un doppio lavoro...simulare il pic...heheh) ...ma il pic si!
Ci aggiorniamo domani se ho tempo faccio una prova reale con il pic....magari modificando un codice preesistente o facendo una nuova applicazione.

Ciao
Bolle
PS:C'è anche la funzione POW...ma solo con valori interi...cioè fa al caso tuo....ma forse è meglio mettere lo scorrimento a destra/sinistra dei bit...vediamo.... faccine/construction.gif
Ciao
Bolle



---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripet...

 

MarKoZaKKa

Avatar
GigaWatt


Utente
Msg:1886

Stato:



Inviato il: 25/10/2011,23:28

... sprovveduto magari no, sicuramente non sono in grado di fare ciò che hai fatto tu; dato che però col pptea + wireless posso, a basso costo, automatizzare diverse cose in casa, cosa che per un motivo o l'altro non riesco mai a fare, per ora "gioco" con il simulatore, quando avrò in mano l'hardware, come dicevo, dovrò fare sul serio, a partire dal costruirmi il laboratorio elettronica nel sottotetto di casa... e con 2 figli piccoli e la moglie non è facile, sopratutto in una casa come la mia di ben 45mq senza cantina... faccine/sad.gif
Appena lo finisco il debugging posto il codice di una (possibile) applicazione domotica, intanto verifico cio che mi dici sulla INP.
Ciao!



---------------
Tecnico qualificato in clownerie
Windsurfer a tempo perso
Slalomaro senza speranze
...

 

NonSoloBolleDiA...

Avatar
PetaWatt


AMMINISTRATORE
Msg:13786

Stato:



Inviato il: 26/10/2011,08:17

CITAZIONE (MarKoZaKKa @ 26/10/2011, 00:28)
...in una casa come la mia di ben 45mq senza cantina...

faccine/blink.gif
non preoccuparti nel forum non si va di fretta...abbiamo tutto il tempo del mondo...il PPTEA cresce con le esigenze del forum stesso.Se ho tempo vedo di buttare giù qualche idea...sempre sul progetto che hai in mente di fare....nella speranza di andare nella direzione che ti sei prefissato.
Ciao
Bolle



---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripet...

 

MarKoZaKKa

Avatar
GigaWatt


Utente
Msg:1886

Stato:



Inviato il: 27/10/2011,16:49

Ipotesi di applicazione domotica di base (ancora non verificato in hw)
ipotesi: camera di albergo con bagno
colegamenti:
- punto luce stanza out pin 13 - pulsante pin 2
- punti luce letto out pin 21 - pulsanti sx/dx pin 3/4
- punto luce bagno out pin 23 - pulsante pin 5
- punto luce specchio bagno out pin 6 - pulsante pin 24

Fondamentalmente il pic agisce come relè passo passo, una pressione breve commuta lo stato dell'uscita corrispondente,
In più, posso definire le azioni per pressioni prolungate dei singoli pulsanti, come da esempio seguente.

10 CADS=0 'NO ADC
15 SETIO=&H00FF '1/8 INPUTS - 9/16 OUTPUTS
20 'WIFIDISP=&HF001 'SVILUPPO PER WIFI
25 'MAST_WIFI=&HFF01 'SVILUPPO PER WIFI
30 PULS=INP 'LEGGO INPUTS
35 IF PULS<>0 THEN 30 ELSE 40 'SE INPUTS NON A RIPOSO, ASPETTO
40 OLD_PULS=INP 'MEMORIZZO STATO INPUTS A T0
45 IF OLD_PULS=0 THEN 40 'SE INPUTS A RIPOSO, ASPETTO VARIAZIONE
50 WAITMS 500 'ASPETTO 500ms
55 PULS=INP 'LEGGO INPUTS
60 IF PULS=OLD_PULS THEN 105 ELSE 70 'DISCRIMINO PRESSIONE BREVE/LUNGA
70 PULS=OLD_PULS 'CICLO PER PRESSIONE BREVE, USO LO STATO INPUTS MEMORIZZATO
81 ACT_STATE=ACT_STATE XOR PULS 'AGGIORNO MEMORIA STATO USCITE
95 OUT=ACT_STATE*256 'IMPOSTO NUOVO STATO USCITE
100 GOTO 30 'RIPARTO CON IL CICLO
105 IF PULS=1 THEN 110 ELSE 135 'IN CASO DI PRESSIONE LUNGA, USO LO STATO ULTIMO DEGLI INPUTS
110 IF ACT_STATE=0 THEN 115 ELSE 125 'PRESSIONE LUNGA PULS 1
115 ACT_STATE=&HFF 'SE TUTTO SPENTO ACCENDE TUTTE LE USCITE
120 GOTO 95
125 ACT_STATE=&B00000001 'ALTRIMENTI SPEGNE TUTTO ECCETTO USCITA 1
130 GOTO 95
135 IF (PULS=2) OR (PULS=4) THEN 140 ELSE 145 'PRESSIONE LUNGA PULS 2/3 SPEGNE TUTTO ACCENDE OUT 2/4
140 ACT_STATE=&B00000110
141 GOTO 95
145 IF PULS=8 THEN 150 ELSE 155 'PRESSIONE LUNGA PULS 4 SPEGNE TUTTO ACCENDE OUT 4
150 ACT_STATE=&B00001000
151 GOTO 95
155 IF PULS=16 THEN 160 ELSE 165 'PRESSIONE LUNGA PULS 5 SPEGNE TUTTO ACCENDE OUT 5
160 ACT_STATE=&B00010000
161 GOTO 95
165 'ALTRI CASI
300 GOTO 95 'RIPARTO CON IL CICLO

Cosa ve ne pare? Si può migliorare (ovvero rendere più snello?)


Il proseguo, sarà far comunicare il PPTEA della stanza con un PPTEA master, per ottenere una serie di funzioni quali
lo spegnimento di tutte le luci con un unico comando.

Ho però delle domande riguardo la comunicazione wireless: con la WIFIDISPINP e la WIFIINP leggo id e byte in arrivo; ma ho un buffer
in ricezione oppure leggo sempre e solo gli ultimi dati, che sovrascrivono quelli arrivati ma non ancora letti?



---------------
Tecnico qualificato in clownerie
Windsurfer a tempo perso
Slalomaro senza speranze
...

 

MarKoZaKKa

Avatar
GigaWatt


Utente
Msg:1886

Stato:



Inviato il: 30/5/2012,15:48

Perchè non unire i due thread ?



---------------
Tecnico qualificato in clownerie
Windsurfer a tempo perso
Slalomaro senza speranze
...

 
 InizioPagina
 

Versione Completa!

Home page     TOP100-SOLAR    Home page forum