Lupin1000 Posted November 5, 2003 Report Posted November 5, 2003 Ok intanto vedo cosa riesco a tirarci fuori...
dlgcom Posted December 22, 2003 Report Posted December 22, 2003 E' ARRIVATO FINALMENTE!!!! Mi e' arrivato il tool di sviluppo ... dopo tante peripezie....Per motivi di urgenza dovro' gia' iniziare ad usarlo .Il mio primo obbiettivo ( a parte capire come funziona ) e' di preparare una rete 485 per comunicare con stazioni che saranno dotate di un PIC .Il secondo di interfacciare una memoria COMPACT FLASH per avere un archivio di eventi.Il terzo di interfacciare il tutto con un PC , a questo punto le strade sono due : usare le potenzialita' di rete del rabbit o creare un interfaccia tipo scada con VB ... allaciandosi al progetto di Livio.In tutti i modi , io credo molto in questi moduli per la loro potenza e versatilita'.Spero che i vecchi adepti di questo progetto siano ancora in attivita' per poter scambiare idee ....Io ho anche avuto fortuna ... comprandolo qui in Brasile ... ho ricevuto anche l'alimentatore Chissa' se possiamo aprire un direttorio per depositare i risultati delle esperienze...Saluti
Livio Orsini Posted December 22, 2003 Report Posted December 22, 2003 Non siamo rimasti in tanti. Io sto preparando qualche cosa sia HW che SW. Avevo anche ipotizzato, nel prosiego del lavoro sugli scada, di interfacciare il Rabbit in ethernet usando VB, sulla falsariga dell'esempio di Tanzilli.Comunque i miei tempi non hanno certo l'urgenza dei tuoi. Io ho giĂ sperimentato alcune cosa, anche se al momento sono un po' fermo. Sono comunquue disponibibile per scambi di idee.Auguri di Buon Natale e Felice 2003 (tra l'altro dalle tue parti dovrebbe essere piena estate o sbaglio?)
ifachsoftware Posted December 22, 2003 Report Posted December 22, 2003 Nei prossimi giorni dovrei incontrare Igor & co e vediamo di definire una qualche linea per procedere.Io delle prove le ho fatte sia come gestione I/O che come gestione di Web Server.Il problema e' sempre quello del tempo.Ciao a tutti
dlgcom Posted December 22, 2003 Report Posted December 22, 2003 Pochi ma buoni... io iniziero propio in queste ferie a studiare e realizzaree qualche cosa in pratica.Il mo progetto e' collegare un carsosello in rete 485 per scambiare dati tra un master e 26 stazioni .Questo master ha il compito di gestire il movimento e la priorita' di ogni stazione .In piu' come ultimo stadio , poter interfacciare il master con una rete locale , per mostrare allarmi e lo stato delle stazioni nel PC della manutenzione.Per rendere le cose piu', difficili , dovro' fare un ponte radio tra il master e i PC , putroppo il master e' sempre in movimento....Ma sara una bella sfida...Buon Natale e felice anno nuovo ... si qui siamo in estate , infatti la notte del 31 e' in progetto di fare il " tradizionale " bagno al mare quando scatta la mezzanotte ....Saluti
ifachsoftware Posted December 23, 2003 Report Posted December 23, 2003 Ti stai ponendo degli obiettivi abbastanza importanti , speriamo di venire a capo anche della documentazione del Rabbit che e' vasta ma purtroppo non troppo chiara ed approfondita.Io in queste feste spero di riuscire a provare finalmente la comunicazione in RS232 (figli permettendo) ...Ciao
Livio Orsini Posted December 23, 2003 Report Posted December 23, 2003 Io sto preparando L'HW degli out analogici ed i relativi driver, oltre al disaccoppiatore opto per gli ingressi encoders.Spero di aver pronto qualche cosa a fine gennaio, cmq sentiamoci periodicamente.PS per ifach: salutami IGORBuone Feste a Tutti
LazyBoy Posted December 29, 2003 Report Posted December 29, 2003 (edited) Ciao a tutti,Sono un analista/programmatore software, ma con una passione sfrenata (anche se poco applicata, purtroppo) per l'elettronica digitale.Le mie prime esperienze con i microcontrollori sono state scolastiche, ma molto interessanti e pratiche, grazie ad un ottimo docente. Una basetta di programmazione con uno Z80 e' stata la mia scuola.Un amico mi ha di recente parlato dei microcontrollori della Rabbit e di questo progetto e il tutto mi ha subito entusiasmato. Ci stiamo apprestando ad ordinare il kit e, sebbene i nostri obiettivi iniziali siano leggermente diversi da quelli che vi proponete in questo progetto, credo si possa instaurare una buona collaborazione.In queste ferie ho gia' letto buona parte della documentazione scaricabile dal sito Rabbit, per cui spero di riuscire ad essere operativo appena il kit arrivera' nelle mie mani :-)A risentirci presto,Stefano Carboni Edited December 29, 2003 by NULL
dlgcom Posted December 30, 2003 Report Posted December 30, 2003 Una basetta di programmazione con uno Z80 e' stata la mia scuolaAllora ti do una bella notizia , li set di istruzioni del Rabbit e' derivato dallo Z80 !Anche io ho iniziato con questo processore , addirittura ho costruito in micro di NE , il primo quello in esadecimale!Se leggi il manuale d'uso del rabbit 3000 vedrai che ci sono molte analogie con lo z80.Anche io sono immerso nella lettura dei manuali , la gestione della memoria non e' una cosa semplicissima , ma per fortuna il dinamic C aiuta un bel po'Per i moderatori , potremmo aprire un "sottoforum" per il rabbit . cosi avremmo un punto di rifeimento dove depositare i risultati delle nostre peripezie .... potrebbe essere nella sezione ELETTRONICA.Coraggio Livio , vedi che non e' del tutto morto questo progetto!!... poi ora che so che e' il nipote dello Z80 , mi sembra di tornare alla mia giovinessa boia ve'
LazyBoy Posted December 30, 2003 Report Posted December 30, 2003 Se leggi il manuale d'uso del rabbit 3000 vedrai che ci sono molte analogie con lo z80.E' proprio questo che mi piace. Ed anche la programmazione in C e' un fattore che mi attrae.Ho notato anch'io che la gestione della memoria non e' molto semplice. Neppure la gestione della Flash e' semplicissima, sebbene la possibilita' di vederla come file system puo' semplificare le cose a seconda del tipo di applicazione.Appena arrivera' il kit cerchero' di fare qualche prova soprattutto in questo senso, visto che altri stanno gia' facendo prove di I/O.Un buon 2004 a tutti :-)Saluti,Stefano Carboni
Livio Orsini Posted December 30, 2003 Report Posted December 30, 2003 Coraggio Livio , vedi che non e' del tutto morto questo progetto!!Io ci spero; se siamo in tanti potrebbo ottenere buoni risultati con minor faticaPer i moderatori , potremmo aprire un "sottoforum" per il rabbit ....Questo forum è specifico per rabbit, anche se è nato per un progetto on line indefinito, si è oramai stabilizzato, lo dice anche il nome del forum: "Rabbit".Sembra che il 2004 sia foriero di novità positive!LazyBoy ("lazzarone") potresti raccontare, brevemente, gli obbiettivi che ti proponi di realizzare con rabbit? Magari potremmo trovare qualche obbietivo comune e così potremmo risparmiare energie.
ifachsoftware Posted December 30, 2003 Report Posted December 30, 2003 (edited) Vi comunico che sono riuscito a gestire la seriale con modulo autocostruito.Nel codice che allego c'e' un esempio di gestione lampeggi + send seriale su porta B con convertitore autocostruito che allego come schema nell'area download + gestione antirimbalzi (Debounce).Spero che uploadi anche qualcun altro del codice ....Ciao a tutti /* IFACH Software - Calpe , Costa Blanca  -------------------------------------  Program name : ProvaRS232.C  Last Update  : 30/Dec/2003  Language ... : Dynamic C SE   Edit by .... : Claudio Rossi ... Rouge          (I love when a software comes together !)  Features ... : Test Uscite RCM3010                         07/Sep/2003 Versione con Out funzionanti (Finalmente !)          30/Dec/2003 Prova Seriale  */ //#use rcm3000.lib    // Libreria da includere per gestire la seriale #class auto       // Place local variables on the stack. /*  Port    Function         I/O  I/O State  ====    =============================  ======    ===========================================  PA0    Configurable external I/O bus  Output    High when not driven by I/O bus  PA1    Configurable external I/O bus  Output    High when not driven by I/O bus  PA2    Configurable external I/O bus  Output    High when not driven by I/O bus  PA3    Configurable external I/O bus  Output    High when not driven by I/O bus  PA4    Configurable external I/O bus  Output    High when not driven by I/O bus  PA5    Configurable external I/O bus  Output    High when not driven by I/O bus  PA6    Configurable external I/O bus  Output    High when not driven by I/O bus  PA7    Configurable external I/O bus  Output    High when not driven by I/O bus  PB0    Not used         Input  Pulled-up on core  PB1    Not used         Input  Pulled-up on core  PB2    Configurable external I/O bus  Input  Pulled-up on core when not driven by I/O bus  PB3    Configurable external I/O bus  Input  Pulled-up on core when not driven by I/O bus  PB4    Configurable external I/O bus  Input  Pulled-up on core when not driven by I/O bus  PB5    Configurable external I/O bus  Input  Pulled-up on core when not driven by I/O bus  PB6    Not used         Output    High when not driven by I/O bus  PB7    Not used         Output    High when not driven by I/O bus  PC0    Not used         Output    High  PC1    Not used         Input  Pulled-up on core  PC2    TXC      Output    High when not driven by RS232  PC3    RXC      Input  Pulled-up on core when not driven by RS232  PC4    TXB      Output    High when not driven by RS232  PC5    RXB      Input  Pulled-up on core when not driven by RS232  PC6    TXA      Output    High when not driven  PC7    RXA      Input  Pulled-up on core when not driven  PD0    Realtek RSTDRV        Output    High when not driven by ethernet  PD1    Not used         Input  Pulled-up on core  PD2    Not used (jumper not installed)    Output    High  PD3    Not used (jumper not installed)    Output    High  PD4    Not used         Output    High  PD5    Not used         Input  Pulled-up on protoboard  PD6    Not used (jumper not installed)    Output    High  PD7    Not used (jumper not installed)    Output    High  PE0    Not used (jumper not installed)    Output    High  PE1    Not used         Output    High  PE2    Realtek  AEN        Output    High when not driven by ethernet  PE3    LCD device select    Output    Low  PE4    Infrared device speed select  Output    Low  PE5    Not used         Output    High  PE6    External I/O Strobe       Output    High when not driven by LCD/Keypad  PE7    Not used         Output    High  PF1    Not used - future Motor/Encoder    Input  Pulled-up on protoboard  PF2    Not used - future Motor/Encoder    Input  Pulled-up on protoboard  PF3    Not used - future Motor/Encoder    Input  Pulled-up on protoboard  PF4    Not used - future Motor/Encoder    Input  Pulled-up on protoboard  PF5    Not used - future Motor/Encoder    Input  Pulled-up on protoboard  PF6    Not used - future Motor/Encoder    Input  Pulled-up on protoboard  PF7    Not used - future Motor/Encoder    Input  Pulled-up on protoboard  PG0    Switch S3 (normally open)      Input  Pulled-up on protoboard   (PULSANTE 1)  PG1    Switch S2 (normally open)      Input  Pulled-up on protoboard   (PULSANTE 2)  PG2    TXF      Output    Pulled-down when not driven by infrared  PG3    RXF      Input  Driven by infrared driver  (LED3)  PG4    Infrared device MD1       Input  Pulled-up on protoboard  PG5    Infrared device MD0       Input  Pulled-down on protoboard  PG6    LED LED1         Output    High            (LED1)  PG7    LED LED2         Output    High            (LED2)     */ nodebug void MyBrdInit() {     // configure Port A     // use SPCR to enable and disable external I/O data bus     WrPortI(PADR, &PADRShadow, 0xFF);      // set to output all high     WrPortI(SPCR, &SPCRShadow, 0x84);      // ignore SMODE pins, set to output         // configure Port B     // use SPCR to enable and disable external I/O address bus     WrPortI(PBDR, &PBDRShadow, 0xC0);      // set bits 7,6 to output high            // bits 5-0 are normally inputs          // configure Port C     // serial port A communicates with Dynamic C     // using serXopen in application code will configure serial ports B and C automatically     // so configuration not needed here     WrPortI(PCDR, &PCDRShadow, PCDRShadow|0x15);  // set bits 4,2,0 high     WrPortI(PCFR, &PCFRShadow, PCFRShadow&0xEA);  // clear bit 4,2,0 to normal function             // bits 5,3,1 normally inputs     // configure Port D     // using ethernet applications will automatically configure bit 0 for strobe     // so not configured here     WrPortI(PDCR, &PDCRShadow, PDCRShadow&0x00);  // clear all bits to pclk/2     WrPortI(PDFR, &PDFRShadow, PDCRShadow&0x00);  // clear all bits to normal function     WrPortI(PDDCR, &PDDCRShadow, PDDCRShadow&0x2D);    // clear bits 7,6,4,3,2,0 drive high and low     WrPortI(PDDR, &PDDRShadow, PDDRShadow|0xDD);  // set bits 7,6,4,3,2,0 output high     WrPortI(PDDDR, &PDDDRShadow, PDDDRShadow|0xDD);    // set bits 7,6,4,3,2,0 to output     WrPortI(PDDDR, &PDDDRShadow, PDDDRShadow&0xDD);    // clear bits 5,1 to input     // configure Port E     // using LCD/Keypad applications will automatically configure bit 6 for external I/O strobe     // so not configured here     // using ethernet applications will automatically configure port bit 2 for strobe     // so not configured here     WrPortI(PECR, &PECRShadow, PECRShadow&0x00);  // clear all bits to pclk/2     WrPortI(PEFR, &PEFRShadow, PECRShadow&0x00);  // clear all bits to normal function     WrPortI(PEDR, &PEDRShadow, 0xE7);       // set bits 7,6,5,2,1,0 output high and             // set bits 4,3 output low     WrPortI(PEDDR, &PEDDRShadow, PEDDRShadow|0xFB);    // set bits 7,6,5,4,3,2,1,0 to output     // configure Port F     // originally for motor/encoders but for anything here     WrPortI(PFCR, &PFCRShadow, 0x00);       // clear all bits for pclk/2     WrPortI(PFFR, &PFFRShadow, 0x00);       // clear all bits for normal function     //WrPortI(PFDCR, &PFDCRShadow, ???);   // future bit drive output     //WrPortI(PFDR, &PFDRShadow, ???);       // future bit output     WrPortI(PFDDR, &PFDDRShadow, 0x00);       // clear all bits to input     // configure Port G     // infrared device sample program will configure serial port F /*     WrPortI(PGCR, &PGCRShadow, 0x00);       // clear all bits for pclk/2     WrPortI(PGFR, &PGFRShadow, 0x00);       // clear all bits for normal function     WrPortI(PGDCR, &PGDCRShadow, PGDCRShadow|0xC0);    // set bits 7,6 drive open drain     WrPortI(PGDR, &PGDRShadow, PGDCRShadow|0xC0);    // set bit 7,6 output high     BitWrPortI(PGDCR, &PGDCRShadow, 0, 2);   // clear bit 2 drive output     BitWrPortI(PGDR, &PGDRShadow, 0, 2);   // clear bit 2 output low     WrPortI(PGDDR, &PGDDRShadow, 0xC4);       // set bits 7,6,2 to output and                         // clear bits 5,4,3,1,0 to input  PG0    Switch S3 (normally open)      Input  Pulled-up on protoboard   (PULSANTE 1) A  PG1    Switch S2 (normally open      Input  Pulled-up on protoboard   (PULSANTE 2) B  PG2    TXF      Output    Pulled-down when not driven by infrared  PG3    RXF      Input  Driven by infrared driver  (LED3)  PG4    Infrared device MD1       Input  Pulled-up on protoboard  PG5    Infrared device MD0       Input  Pulled-down on protoboard  PG6    LED LED1         Output    High            (LED1)  PG7    LED LED2         Output    High            (LED2)   */     WrPortI(PGCR , &PGCRShadow , 0x00);       // clear all bits for pclk/2     WrPortI(PGFR , &PGFRShadow , 0x00);       // clear all bits for normal function     WrPortI(PGDCR, &PGDCRShadow, 0xC8);          // Out 3,7,6 open drain     WrPortI(PGDR , &PGDRShadow , PGDCRShadow|0xC8);    // set bit 3,7,6 output high     WrPortI(PGDDR, &PGDDRShadow, 0xC8);       // 3,7,6 = Uscite gli altri = Input                         } // Definizioni costanti #define LED1 6     // LED 1 port G bit 6 #define LED2 7     // LED 2 port G bit 7 #define LED3 3     // LED 3 port G bit 3 #define PULS1  0    // SWITCH 2 port G bit 0 #define PULS2  1    // SWITCH 1 port G bit 1 #define BINBUFSIZE  15  // Dimensione Rx Buffer RS232 Port B #define BOUTBUFSIZE 15  // Dimensione Tx Buffer RS232 Port B void LedGOn(int led) {     BitWrPortI(PGDR, &PGDRShadow, 0, led); } void LedGOff(int led) {     BitWrPortI(PGDR, &PGDRShadow, 1, led);    } cofunc flashled[2](int led, int ontime, int offtime) {     LedGOn(led);     waitfor(DelayMs(ontime));     LedGOff(led);     waitfor(DelayMs(offtime)); } void main() {  auto int sw1;  auto int Debounce;     MyBrdInit();          // Inizializza il modulo     serBopen(115200);          // Setta Baudrate     serBparity(PARAM_NOPARITY);     // Parity None  serBdatabits(PARAM_8BIT);      // 8 Bit di Dati     serBwrFlush();            // Svuota Buffer Trasmissione     serBrdFlush();            // Svuota Buffer Ricezione  sw1 = 0;  Debounce = 1;            // Pulsante di Debounce      for(;;)     {  costate  {        if(!Debounce)     {     if (!BitRdPortI(PGDR, PULS2)) abort;    // Controlla se PULS2 e' Premuto       serBputs("IFACH Software - Calpe , Costa Blanca\n");   // Invia s sulla seriale B       serBputs("Welcome to the Rabbit !\n");          // Invia s sulla seriale B             Debounce = 1;            // Attiva debounce     }     else  // Se Debounce attivo     {     if (!BitRdPortI(PGDR, PULS2))      // Controlla pulsante rilasciato       {        Debounce = 0;       }     }      }     costate  {         if (BitRdPortI(PGDR, PULS1)) abort;  // wait for switch PULS1 press      waitfor(DelayMs(5));       // switch press detected if got to here      if (BitRdPortI(PGDR, PULS1))         // wait for switch release      {   sw1=!sw1;            // set valid switch    BitWrPortI(PGDR, &PGDRShadow, sw1, LED3);   abort;      }  }      costate  {        wfd    {   // 50 ms on/off   flashled[0](LED1,50,50);  // flashes LED1 (PG6)   }  }   costate  {      wfd      {   // 200 ms on/100 ms off   flashled[1](LED2,200,100);    // flashes LED2 (PG7)      }  }     } } Edited December 30, 2003 by Gabriele Corrieri
LazyBoy Posted December 31, 2003 Report Posted December 31, 2003 LazyBoy ("lazzarone") potresti raccontare, brevemente, gli obbiettivi che ti proponi di realizzare con rabbit? Magari potremmo trovare qualche obbietivo comune e così potremmo risparmiare energie.L'idea e' quella di realizzare un sistema modulare di home automation.Lo so, in commercio ce ne sono tanti, ma a qualcuno manca qualcosa, altri costano un occhio nella testa.Inoltre, se si sceglie un sistema, si deve fare tutto con i pezzi forniti da quella casa.Facendo qualche conto ci siamo resi conto che, progettando un sistema del genere in casa, si risparmierebbe parecchio ed inoltre si potrebbe fare tutto quello che ci passa per la testa.L'obiettivo principale e' quindi progettare un sistema con il core del rabbit che consenta l'aggiunta semplice di schede I/O.Per aumentare le capacita' I/O del rabbit e vista la relativamente bassa velocita' di risposta necessaria in un sistema home, ho pensato di multiplexare gli I/O per aumentarli, visto che da un rapido calcolo eseguito i punti necessari avrebbero superato quelli forniti dal controllore.Direi che in questo progetto, la parte maggiore la dovra' fare il software perche', a parte l'utilizzo di qualche ADC o DAC, il resto sono parti elettronicamente semplici.Il tutto dovra' essere ovviamente progettato utilizzando componenti economici e facilmente reperibili.La ricerca e' gia' cominciata e alcuni punti li abbiamo gia' risoliti e/o decisi.L'applicare poi tutto questo a livello industriale e' sicuramente interessante, ma vista la non abbondante richiesta in questo campo nella nostra zona, e' un obbiettivo che dobbiamo ahime' posticipare :-)Il secondo obiettivo e' poi quello di interfacciare il sistema di gestione con un modem gsm o gprs per la gestione remota.
Livio Orsini Posted December 31, 2003 Report Posted December 31, 2003 Bel colpo Ifach, chiudi bene il 2003! Penso di sfruttare presto le tue routines per fare delle prove di comunicazione.Per LazyBoy.I tuoi obbiettivi coincidono in buona parte con lo scopo iniziale del progetto: realizzare un controllore per ambiente industriale.Un paio di appunti sulle tue ipotesi di soluzione. Si è vero che i tempi di risposta, richiesti della domotica ,sono più lunghi dei corrispettivi medi richiesti dall'automazione industriale, questo però non implica che la scelta di multiplexar gli I/O sia la migliore.Multiplexare significa avere comunque un bus parallelo; un bus parallelo diminuisce l'immunità ai disturbi. Il sistema non opera in uno stabilimento dove sono presenti inverter, motori ed altri generatori di disturbi, ma anche in casa non si scherza: basta accendere un macinacaffè e rischi di mandare in blcco il controllore.Io ti consiglerei di pensare seriamente all'uso di bus seriale come I2C e/o SPI. Tra l'altro è l'espansione di I/O che sto implementando: parto con i D/A C e proseguo con A/D C e digitali. In commercio esistono numerosi dispositivi che convertono I2C eSPI in linee di In Out. Sto provando Philips, ma ce ne sono anche prodotti da Motorola, Maxim, ST, etc.Tra l'altro i bus di espansione della Siemens S7-200 e 300 sono di tipo seriale proprio per aumentare l'immunità .Prova a pensarci sopra e facci sapere, potremmo sviluppare assieme l'I/O.Felice 2004 a tutti
ifachsoftware Posted December 31, 2003 Report Posted December 31, 2003 Io ti consiglerei di pensare seriamente all'uso di bus seriale come I2C e/o SPIAggiungerei anche la RS485 per poter remotare in giro dei moduli intelligenti con magari a bordo dei micro piu' a buon mercato quali i PIC , avendo il vantaggio di andare fino a 2Km con solo 2 fili twistati.Ciao
LazyBoy Posted December 31, 2003 Report Posted December 31, 2003 Io ti consiglerei di pensare seriamente all'uso di bus seriale come I2C e/o SPI. Tra l'altro è l'espansione di I/O che sto implementando: parto con i D/A C e proseguo con A/D C e digitali. In commercio esistono numerosi dispositivi che convertono I2C eSPI in linee di In Out. Sto provando Philips, ma ce ne sono anche prodotti da Motorola, Maxim, ST, etc.Ho pensato anch'io ai disturbi, ma non avendo ancora il kit sottomano (quanto vorrei che il tempo 0 non fosse solo teorico) non ho potuto fare alcuna prova.L'I2C non l'ho mai usato e nonostante ci abbia pensato mi prefiggevo di fare qualche prova sul campo sulle prestazioni di velocita'.comunque sono aperto ad ogni soluzione e confronto, vista anche la mia poca esperienza in campo elettronico.Appena arrivera' il kit vorrei fare (come gia' sta facendo ifach) qualche prova con il software, per stabilire limiti e velocita' operative. A quel punto si dovra' combinare con l'hardware per ottenere prestazioni accettabili.Per quanto riguarda il multiplexer credo che i disturbi si potrebbero limitare con qualche accorgimento, ma mi riservo di fare qualche prova sul campo :-)Il bus I2C lo sfrutterei sicuramente per una periferica opzionale ma quasi indispensabile in un sistema di domotica serio: un tastierino/display per la modifica delle opzioni del sistema e il controllo degli stati, come anche la segnalazione di allarmi. In quel caso userei un PIC (o un altro Rabbit, tanto per non cambiare sistema di sviluppo... magari un 3110 che e' abbastanza economico) per gestire il tutto, collegandolo al Rabbit di controllo attraverso bus I2C o un'altra delle seriali che ha a disposizione.Per quanto riguarda il display ci sono tante opzioni: testo, grafico, grafico a colori. C'e' solo da scegliere. Ho trovato dei bellissimi display a colori che, compresi di controllore, hanno un costo abbordabile.Diciamo che l'inizio del nuovo anno (e l'arrivo tardivo della mia tredicesima) daranno sfogo allo sperimentatore elettronico che giaceva in letargo nel mio cervellino :-)
Livio Orsini Posted December 31, 2003 Report Posted December 31, 2003 Sul medesimo bus I2C o SPI puoi mettere molte periferiche. Per la velocitĂ ne hai da vendere. Con un Pic 16F876 acquisisco 8 canali A/D ad 1 ms. senza stress.
ELMO Posted January 2, 2004 Report Posted January 2, 2004 Salve ragazzimi sono appena letto tutta la lunga discussione e dovrei dire che è molto interessante.Ho solo un dubbio come mai sono stati inseriti due progetti quasi identici (quello di Dario e questo "Rabbit") e con anche gli stessi obbiettivi o simili?Anche perchè unire tutti gli sforzi dei singoli si può ottenere un prodotto veramente GRANDE.
Livio Orsini Posted January 2, 2004 Report Posted January 2, 2004 Non sono due progetti quasi identici, anzi hanno molte differenze; inoltre i tempi sono molto diversi: questo progetto è iniziato nel primo trimestre dello scorso anno poi, verso la fine dell'anno è arrivato il progetto di Dario. Il progetto di Dario propone, come scopo primario, l'acquisizione di conoscenze per sviluppare e progettare con i microprocessori, infatti ha realizzato una scheda con funzioni di sistema di sviluppo.Il progetto con Rabbit si basa sull'adozione di un HW consolidato con caratteristiche ben precise, su del FW consolidato e preciso. Su queste basi si intende sviluppare un sistema di controllo, costruendo le periferiche di campo e sviluppando il SW necessario.E' altresì evidente che ci sono punti di ricopertura, come ci sono punti di ricopertura con il progetto SCADA; ebbene queste ricoperture si cercherà di sfruttarle al meglio.Siamo sempre molto contenti se vengono avanzate proposte concrete.
ELMO Posted January 2, 2004 Report Posted January 2, 2004 (edited) Grazie Livio per la delucidazionevedo molto interessante ambedue i progetti e...però vorrei a provare a darvi una mano con il rabbit (anche se non ho più preso in mano il C da molto tempo).Per reperirlo (siccome ami serve la fattura) posso fare riferimento ad AreaSX? Edited January 2, 2004 by ELMO
Livio Orsini Posted January 2, 2004 Report Posted January 2, 2004 Io l'ho acquistato da Esprinet (il sito lo trovi sul webb), la persona di riferimento è Michele Conti che è il product manager di Rabbit (info di Luglio 03). A suo tempo avevamo negoziato un prezzo scontato per gli iscritti a PLCForum. Puoi acquistare anche da areasx: le info che ho la danno come società seria.
ifachsoftware Posted January 2, 2004 Report Posted January 2, 2004 siccome ami serve la fatturaLa fattura te la fanno tutti , il vantaggio principale di AreaSx e' che in 2-3 giorni hai in mano il tutto e che vende anche a privati , mentre Comprel vende solo a societa' , se devi acquistare come privato ti gira ad una consociata con naturalmente prezzi differenti ...Considera che AreaSX e' leggermente piu' cara di Comprel.Ciao
ifachsoftware Posted January 2, 2004 Report Posted January 2, 2004 Eccovi l'esempio con gestione in ricezione della seriale con time-out se non vengono processati i caratteri per piu' di 2 secondi./* IFACH Software - Calpe , Costa Blanca   -------------------------------------   Program name : ProvaRS232.C   Last Update : 02/Jan/2004   Language ... : Dynamic C SE    Edit by .... : Claudio Rossi ... Rouge          (I love when a software comes together !)   Features ... : Test Uscite RCM3010                         07/Sep/2003 Versione con Out funzionanti (Finalmente !)          30/Dec/2003 Prova Seriale          02/Jan/2004 Versione con capito il Fronte con i costate                + gestita ricezione seriale */ //#use rcm3000.lib   // Libreria da includere per gestire la seriale #class auto       // Place local variables on the stack. /*   Port    Function     I/O I/O State   ====    ============================= ======    ===========================================   PA0    Configurable external I/O bus Output    High when not driven by I/O bus   PA1    Configurable external I/O bus Output    High when not driven by I/O bus   PA2    Configurable external I/O bus Output    High when not driven by I/O bus   PA3    Configurable external I/O bus Output    High when not driven by I/O bus   PA4    Configurable external I/O bus Output    High when not driven by I/O bus   PA5    Configurable external I/O bus Output    High when not driven by I/O bus   PA6    Configurable external I/O bus Output    High when not driven by I/O bus   PA7    Configurable external I/O bus Output    High when not driven by I/O bus   PB0    Not used     Input Pulled-up on core   PB1    Not used     Input Pulled-up on core   PB2    Configurable external I/O bus Input Pulled-up on core when not driven by I/O bus   PB3    Configurable external I/O bus Input Pulled-up on core when not driven by I/O bus   PB4    Configurable external I/O bus Input Pulled-up on core when not driven by I/O bus   PB5    Configurable external I/O bus Input Pulled-up on core when not driven by I/O bus   PB6    Not used     Output    High when not driven by I/O bus   PB7    Not used     Output    High when not driven by I/O bus   PC0    Not used     Output    High   PC1    Not used     Input Pulled-up on core   PC2    TXC     Output    High when not driven by RS232   PC3    RXC     Input Pulled-up on core when not driven by RS232   PC4    TXB     Output    High when not driven by RS232   PC5    RXB     Input Pulled-up on core when not driven by RS232   PC6    TXA     Output    High when not driven   PC7    RXA     Input Pulled-up on core when not driven   PD0    Realtek RSTDRV    Output    High when not driven by ethernet   PD1    Not used     Input Pulled-up on core   PD2    Not used (jumper not installed)    Output    High   PD3    Not used (jumper not installed)    Output    High   PD4    Not used     Output    High   PD5    Not used     Input Pulled-up on protoboard   PD6    Not used (jumper not installed)    Output    High   PD7    Not used (jumper not installed)    Output    High   PE0    Not used (jumper not installed)    Output    High   PE1    Not used     Output    High   PE2    Realtek AEN    Output    High when not driven by ethernet   PE3    LCD device select   Output    Low   PE4    Infrared device speed select Output    Low   PE5    Not used     Output    High   PE6    External I/O Strobe   Output    High when not driven by LCD/Keypad   PE7    Not used     Output    High   PF1    Not used - future Motor/Encoder    Input Pulled-up on protoboard   PF2    Not used - future Motor/Encoder    Input Pulled-up on protoboard   PF3    Not used - future Motor/Encoder    Input Pulled-up on protoboard   PF4    Not used - future Motor/Encoder    Input Pulled-up on protoboard   PF5    Not used - future Motor/Encoder    Input Pulled-up on protoboard   PF6    Not used - future Motor/Encoder    Input Pulled-up on protoboard   PF7    Not used - future Motor/Encoder    Input Pulled-up on protoboard   PG0    Switch S3 (normally open)  Input Pulled-up on protoboard  (PULSANTE 1)   PG1    Switch S2 (normally open)  Input Pulled-up on protoboard  (PULSANTE 2)   PG2    TXF     Output    Pulled-down when not driven by infrared   PG3    RXF     Input Driven by infrared driver (LED3)   PG4    Infrared device MD1   Input Pulled-up on protoboard   PG5    Infrared device MD0   Input Pulled-down on protoboard   PG6    LED LED1     Output    High            (LED1)   PG7    LED LED2     Output    High            (LED2)    */ nodebug void MyBrdInit() {     // configure Port A     // use SPCR to enable and disable external I/O data bus     WrPortI(PADR, &PADRShadow, 0xFF);     // set to output all high     WrPortI(SPCR, &SPCRShadow, 0x84);     // ignore SMODE pins, set to output         // configure Port B     // use SPCR to enable and disable external I/O address bus     WrPortI(PBDR, &PBDRShadow, 0xC0);     // set bits 7,6 to output high            // bits 5-0 are normally inputs         // configure Port C     // serial port A communicates with Dynamic C     // using serXopen in application code will configure serial ports B and C automatically     // so configuration not needed here     WrPortI(PCDR, &PCDRShadow, PCDRShadow|0x15); // set bits 4,2,0 high     WrPortI(PCFR, &PCFRShadow, PCFRShadow&0xEA); // clear bit 4,2,0 to normal function          // bits 5,3,1 normally inputs     // configure Port D     // using ethernet applications will automatically configure bit 0 for strobe     // so not configured here     WrPortI(PDCR, &PDCRShadow, PDCRShadow&0x00); // clear all bits to pclk/2     WrPortI(PDFR, &PDFRShadow, PDCRShadow&0x00); // clear all bits to normal function     WrPortI(PDDCR, &PDDCRShadow, PDDCRShadow&0x2D);    // clear bits 7,6,4,3,2,0 drive high and low     WrPortI(PDDR, &PDDRShadow, PDDRShadow|0xDD); // set bits 7,6,4,3,2,0 output high     WrPortI(PDDDR, &PDDDRShadow, PDDDRShadow|0xDD);    // set bits 7,6,4,3,2,0 to output     WrPortI(PDDDR, &PDDDRShadow, PDDDRShadow&0xDD);    // clear bits 5,1 to input     // configure Port E     // using LCD/Keypad applications will automatically configure bit 6 for external I/O strobe     // so not configured here     // using ethernet applications will automatically configure port bit 2 for strobe     // so not configured here     WrPortI(PECR, &PECRShadow, PECRShadow&0x00); // clear all bits to pclk/2     WrPortI(PEFR, &PEFRShadow, PECRShadow&0x00); // clear all bits to normal function     WrPortI(PEDR, &PEDRShadow, 0xE7);   // set bits 7,6,5,2,1,0 output high and          // set bits 4,3 output low     WrPortI(PEDDR, &PEDDRShadow, PEDDRShadow|0xFB);    // set bits 7,6,5,4,3,2,1,0 to output     // configure Port F     // originally for motor/encoders but for anything here     WrPortI(PFCR, &PFCRShadow, 0x00);   // clear all bits for pclk/2     WrPortI(PFFR, &PFFRShadow, 0x00);   // clear all bits for normal function     //WrPortI(PFDCR, &PFDCRShadow, ???);  // future bit drive output     //WrPortI(PFDR, &PFDRShadow, ???);   // future bit output     WrPortI(PFDDR, &PFDDRShadow, 0x00);   // clear all bits to input     // configure Port G     // infrared device sample program will configure serial port F /*     WrPortI(PGCR, &PGCRShadow, 0x00);   // clear all bits for pclk/2     WrPortI(PGFR, &PGFRShadow, 0x00);   // clear all bits for normal function     WrPortI(PGDCR, &PGDCRShadow, PGDCRShadow|0xC0);    // set bits 7,6 drive open drain     WrPortI(PGDR, &PGDRShadow, PGDCRShadow|0xC0);    // set bit 7,6 output high     BitWrPortI(PGDCR, &PGDCRShadow, 0, 2);  // clear bit 2 drive output     BitWrPortI(PGDR, &PGDRShadow, 0, 2);  // clear bit 2 output low     WrPortI(PGDDR, &PGDDRShadow, 0xC4);   // set bits 7,6,2 to output and                          // clear bits 5,4,3,1,0 to input   PG0    Switch S3 (normally open)  Input Pulled-up on protoboard  (PULSANTE 1) A   PG1    Switch S2 (normally open  Input Pulled-up on protoboard  (PULSANTE 2) B   PG2    TXF     Output    Pulled-down when not driven by infrared   PG3    RXF     Input Driven by infrared driver (LED3)   PG4    Infrared device MD1   Input Pulled-up on protoboard   PG5    Infrared device MD0   Input Pulled-down on protoboard   PG6    LED LED1     Output    High            (LED1)   PG7    LED LED2     Output    High            (LED2)  */     WrPortI(PGCR , &PGCRShadow , 0x00);   // clear all bits for pclk/2     WrPortI(PGFR , &PGFRShadow , 0x00);   // clear all bits for normal function     WrPortI(PGDCR, &PGDCRShadow, 0xC8);      // Out 3,7,6 open drain     WrPortI(PGDR , &PGDRShadow , PGDCRShadow|0xC8);    // set bit 3,7,6 output high     WrPortI(PGDDR, &PGDDRShadow, 0xC8);   // 3,7,6 = Uscite gli altri = Input                        } // Definizioni costanti #define LED1 6     // LED 1 port G bit 6 #define LED2 7     // LED 2 port G bit 7 #define LED3 3     // LED 3 port G bit 3 #define PULS1 0   // SWITCH 2 port G bit 0 #define PULS2 1   // SWITCH 1 port G bit 1 #define BINBUFSIZE 15  // Dimensione Rx Buffer RS232 Port B #define BOUTBUFSIZE 15  // Dimensione Tx Buffer RS232 Port B void LedGOn(int led) {     BitWrPortI(PGDR, &PGDRShadow, 0, led); } void LedGOff(int led) {     BitWrPortI(PGDR, &PGDRShadow, 1, led);    } cofunc flashled[2](int led, int ontime, int offtime) {     LedGOn(led);     waitfor(DelayMs(ontime));     LedGOff(led);     waitfor(DelayMs(offtime)); } void main() {   auto int        sw1;   auto int        nEntrambi;   auto char        Buff[80];     auto unsigned long int    timer;   auto int        OldNChars;          MyBrdInit();         // Inizializza il modulo     serBopen(115200);          // Setta Baudrate     serBparity(PARAM_NOPARITY);     // Parity None   serBdatabits(PARAM_8BIT);      // 8 Bit di Dati     serBwrFlush();           // Svuota Buffer Trasmissione     serBrdFlush();           // Svuota Buffer Ricezione   sw1    = 0;   nEntrambi = 0;   timer   = 0;   OldNChars = 0;        for(;;)  // Main Loop     {    // Premendo il Puls1 viene fatto un toggle sul Led3  costate  {      if(!BitRdPortI(PGDR, PULS1)) abort;              // Se ho la condizione di attivazione annullo perche' non e' un fronte   waitfor(DelayMs(5));                   // Aspetto il fronte entro 5ms   if(!BitRdPortI(PGDR, PULS1))                  // Se ho la condizione e' un fronte !   {   sw1=!sw1;                     // Inverte lo stato dell'uscita    BitWrPortI(PGDR, &PGDRShadow, sw1, LED3);          // Scrive l'uscita   }  }    // Premendo il Puls2 viene inviata una stringa con la seriale   costate  {      if(BitRdPortI(PGDR, PULS1) &! BitRdPortI(PGDR, PULS2)) abort; // Se ho la condizione di attivazione annullo perche' non e' un fronte   waitfor(DelayMs(5));                   // Aspetto il fronte entro 5ms   if(BitRdPortI(PGDR, PULS1) &! BitRdPortI(PGDR, PULS2))     // Se ho la condizione e' un fronte !   {       serBputs("IFACH Software - Calpe , Costa Blanca\n");    // Invia s sulla seriale B       serBputs("Welcome to the Rabbit !\n");           // Invia s sulla seriale B      }   }       // Lampeggio 50ms On / 50ms Off    costate  {        wfd     {   // 50 ms on/off   flashled[0](LED1,50,50);                 // Fa lampeggiare il LED1 (PG6)    }  }    // Lampeggio 200ms On / 200ms Off    costate  {   wfd   {   // 200 ms on/200 ms off   flashled[1](LED2,200,200);                  // Fa lampeggiare il LED2 (PG7)   }  }    // Invia messaggio se premuti contemporaneamente Puls1 e Puls2   costate  {      if(!BitRdPortI(PGDR, PULS1) &! BitRdPortI(PGDR, PULS2)) abort;  // Se ho la condizione di attivazione annullo   waitfor(DelayMs(5));                    // Se Non avevo la condizione di attivazione ma arriva entro 5ms allora ho un fornte di salita !   if(!BitRdPortI(PGDR, PULS1) &! BitRdPortI(PGDR, PULS2))     // Se ho la condizione   {       sprintf(Buff,"Premuti Entrambi [%d]\n",++nEntrambi);     // Preparo la stringa da inviare       serBputs(Buff);                        // Invia s sulla seriale B   }  }    // Gestione seriale con time-out   costate  {      if(timer == 0)      // Se ci sono caratteri in attesa nel Buffer      {       if(serBrdUsed() > OldNChars) // Se e' aumentato il numero di dati Resetta il time-out       {         OldNChars = serBrdUsed();         timer = MS_TIMER;  // get current time in milliseconds       }       else       {         OldNChars = serBrdUsed();         if(!OldNChars) timer = 0;       }      }      if(serBrdUsed())      {       if(MS_TIMER > (timer + 2000)) // Se time-out a 2 sec       {         timer = 0;         OldNChars = 0;         serBrdFlush();       // Svuota Buffer Ricezione         serBputs("\nTime-Out RS232 Port B !");               }           }           if(serBrdUsed() > 3) // Se ci sono > di 3 caratteri in attesa nel Buffer      {        if(!serBread(Buff,4,200))  // Se c'e' errore nella lettura        {         serBputs("\nErrore Lettura Buffer !");        }        else        {         serBputs("\nBuffer Letto = ");         Buff[4] = '\0'; // Termina il Buffer         serBputs(Buff);        }               serBrdFlush(); // Svuota Buffer Ricezione      }          }       } }Ciao a tutti
ELMO Posted January 3, 2004 Report Posted January 3, 2004 (edited) Grazie per l'informazione Livio e IfachPer Comprel mi sono registrato ma per fare l'ordine mi manca il codice cliente (te lo forniscono tramite e-mail la prima volta?)Volevo chiedere se con questo tool di sviluppo si possono poi programmare anche le cpu piĂą piccole(o piu grandi) o solo quelle della serie 3000?Io avrei intenzione di utilizzarlo per controllare temperatura e umiditĂ in processi alimentari (quindi anche utilizzare diversi I/O ) per poi collegarli in una rete tra loro (RS485) per acquisire i vari dati di lavoro da PC (progetto SCADA) Edited January 3, 2004 by ELMO
ifachsoftware Posted January 3, 2004 Report Posted January 3, 2004 Volevo chiedere se con questo tool di sviluppo si possono poi programmare anche le cpu piĂą piccole(o piu grandi) o solo quelle della serie 3000?C'e' la versione Premiere che programma tutti i moduli , anche se i kit di sviluppo sono dedicati al core che scegli.Inoltre devi considerare che ci sono Cavi di programmazione differenti per la serie 2000 , 3000 e 3400.Il modulo che stiamo usando per le prove e' l'RCM3010 che e' lo stesso fornito con il kit.Ciao
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now