ifachsoftware Posted August 10, 2004 Report Share Posted August 10, 2004 x Dlgcom il problema di comunicazione non e' che e' legato al cavo o al tipo di Hub ? , perche' le prove che avevo fatto andavano alla grande.Ciao Link to comment Share on other sites More sharing options...
walterword Posted August 10, 2004 Report Share Posted August 10, 2004 ...le prove che AVEVAMO FATTO andavano alla grande Link to comment Share on other sites More sharing options...
dlgcom Posted August 11, 2004 Report Share Posted August 11, 2004 X Luciano se usi un chip standard vede solo 32 nodi comunque 32 nodi li vedono tuttiX ifachInfatti penso che siano problemi con la configurazione , non uso hub , ma un cavo invertito.La comunicazione c'e' perche' se faccio un pinga dal rabbit al pc funziona.Ma se faccio un ping dal pc al rabbit , non va , mi dice che non riesce a collegarsi .Penso che sia una configurazione del pc , ma chssa' quale.Neanche il firewall si arrabbia , non mi chiede niente.Tutte le prove di accesso scatenano il dialer di internet , chidendomi di accessare ad internet o rimanere offline .É' come se non riconoscesse la intranet...pero' il rabbit e' in rete , se cerco di dare lo stesso indirizzo del rabbit al pc me lo rifiuta ... quindi XP riconosce che il rabbit sia in rete , ma non so come dirgli di cercare un indirizzo nella rete interna ... sara una questione di proxy?Come avete configurato la rete sul pc?X Walter.Adesso che un cliente mi ha commissionato un progetto dove usero' il rabbit , posso permettermi il lusso di smanettare sul coniglio ...Dovro' fare delle prove in ic2 con il pic , ti faro' sapere .Per il C , attento che alcune versioni del CCS avevano problemi e alcuni bug...Io per avere un compilatore C valido e gratis .. o quasi ... sto' passando ai microcontrollori della Zilog , esattamante la famiglia Z8Encore! ottimi processori , con caratteristiche quasi uguali ai 18F e con un sistema di sviluppo da meno di 100 euro ...Hanno anche la moltiplicazione hardware interna e 2 UART!!!Devo solo trovare chi vende giorni da 35 ore .... nessuno sa dove? Link to comment Share on other sites More sharing options...
walterword Posted August 11, 2004 Report Share Posted August 11, 2004 ho un amico che tratta Zilogtempo fa addirittura ti ritiravano il kit del rabbit e ti davano uno zilog solo che pero il kit del rabbit , con compilatore ect l'ho pagato di piu di 100 euro e cosi ho deciso di tanaermi il coniglio hai provato il codice che ti ho postato ,,,non si sa mai , provalo fratellociaowalter Link to comment Share on other sites More sharing options...
dlgcom Posted August 11, 2004 Report Share Posted August 11, 2004 Domani sicuramente lo provero' . Avevo solo provato i demo e gli esempi di Tanzilli , ma mi danno lo stesso problema.Domani dal´l'ufficio mi collego e vi faro' sapere.Ho anche un altro hd , installo il sistema di backup e provo cosi' senza modem...Non vorrei.... Link to comment Share on other sites More sharing options...
walterword Posted August 11, 2004 Report Share Posted August 11, 2004 (edited) sto riscontrando dei problemi sulla comunicazione tra pic e pc in rs232non capisco se il pic mi spedisce dei caratteri diversi da quelli che gli dico di spedire io uso int dati[4];int from8574;char string[7];.......string[0]=dati[0];string[1]=dati[1];string[2]=dati[2];string[3]=dati[3];string[4]=from8574;string[5]='\n';string[6]='\r';printf(string);ha funzionato per un po e poi ha iniziato a dare i numeri quando ho implementato l'interrupt del timer2 , che tra l'altro rallentava le varie comunicazioni spedendo in rs232 cosa assurdeHo tolto l'intrerrupt del timer2 e ha ricominciato il tutto a funzionare ma con cose strane per esempio ricevo il buffer giusto per pochi secondi e poi lo ricevo shiftato di un byte ultimamente poi sembrerebbe ch eil pic spedisca cose strane Sono stato anche attento a compilare il file .c giusto ed a caricarlo in mplab giusto (.hex)Bo non capisoc , non dovro mica smazzarmi anche la seriale tutta in assembly , va be ho gia in mano il materiale per farlo Ma questo PCM ha dei bachi mostruosi per caso ????? Edited August 11, 2004 by walterword Link to comment Share on other sites More sharing options...
Dario Valeri Posted August 11, 2004 Report Share Posted August 11, 2004 ciaoaltola'!come gestisci la seriale??usi il suo interrupt?? perche' se usi dei loop......stai fresco.e' meglio usare l'inerrupt della uart , io non conosco i pic ma c'e', con quello funzionera' al 100%io ho provato su hitachi (h8) mu motorola e su mitsubishi ed usando il interrupt uart non ci sono probleminemmeno se attivi l'interrupt timer (che di solito viene settato con una priorita' piu' alta)ciaodario Link to comment Share on other sites More sharing options...
walterword Posted August 11, 2004 Report Share Posted August 11, 2004 all'interno del loop di programma (nel classico while... ) uso un delay_ms(100) di 100 millisecondi , poi faccio due letture ed 1 scrittura a 2 devicesin I2C con una libreria che ho scritto che manipola l'SDA e SCL e funziona da dio poi scrivo su seriale con printf e gli passo l'array di char o interi , segue poi "\n\r" per chiudere .quindi ritorno all'inizio del loop ed aspetto ancora 100 ms (ad ogni ciclo )poi ho provato ad usare l'interrupt che viene richiamato quando il il buffer di trasmissione di 1 byte e' vuoto , ho provato indicizzando ed anche a spedire un solo carattereDi peggio in peggio Nel pc scrivo un'applicazione in Vc#.net dove utilizzo una dll scritta in vb.net che wrappa le api per la seriale Se uso l'interrupt mi rallenta tutto il resto e lo vedo da un diodo che si accende a fine scrittura , e si resetta per poi settarsi dopo i 100 ms di delay le ho provate tutte , non so piu cosa fare , mi tocchera scrivere una libreria come ho fatto per l'I2C La guida del PCM la racconta facile , peccato che non vada un ca**o pero 'Sto perdendo troppo tempo e denaro , se non riesco a far funzionare domani il discorso dovro mollare e ributtarmi sul vc# e Asp.net e database Sto girando tutto internet come un pazzo e trovo solo le stesse cose Del resto non c'e' nemmeno nessuno che mi dica qualcosa , sto facendo tutto da solo con grande fatica , quando basterebbero 4 righe di codice per far funzionare tutto .Sto gia facendo fin troppo ciao walter Link to comment Share on other sites More sharing options...
walterword Posted August 12, 2004 Report Share Posted August 12, 2004 ok ho capito il problema in sostanza , nel Pic , spedivo un array di char , pero copiavo dentro ad ogni singolo caratteri un valore intero , il compilatore non mi dava errore Adesso faccio le letture dei pcf8574 e pcf8591 appoggiandomi su dati di tipo char cosi poi li impacchetto e li spedisco , e arrivano corretti nel mio bufferino di 7 byte in vc# .Bene cosi funziona anche il software pc , stavo veramente impazzendo , le ho pensate tutte adesso e' ok ciao walter Link to comment Share on other sites More sharing options...
walterword Posted August 12, 2004 Report Share Posted August 12, 2004 (edited) ho provato anche l'interrupt quando il buffer di trasmissione e' vuoto ma e' troppo veloce mi impalla tutto ed arrivano dati bruttissimi se invece faccio il printf nel loop del main allora funziona benissimo solo che ogni volta che eseguo il main loop uso un delay di 100 ms .Va bene la comunicazione , ma poi ?????che razzo di automazione tiro fuori a 100 ms ??? una schifezza D'altronde se uso l'interrupt e' troppo veloce mi impalla tutto Avete qualche idea ???ciao walterdovrei settare il timer2 a 100ms di overflow e poi scrivere sulla seriale nell'interrupt di questo timer Edited August 12, 2004 by walterword Link to comment Share on other sites More sharing options...
Dario Valeri Posted August 12, 2004 Report Share Posted August 12, 2004 ciaoattenzione che devi sospendere l'interrupt di trasmissione quando il buffer e' vuoto. io , sul mitsubishi (che ha 5 seriali)faccio cosi:1) preparo i dati un un buffer2) metto il primo dato (puntato da un puntatore) nel buffer di trasmissione3)abilito la trasmissione (con un suo flag particolare)che parte immediatamente4)quando il micro ha spedito il byte genera un unterrupt che io faccio puntarea una mia routin che incrementa il puntatore e carica nel buffer di trasmissione il successivo byte5)quando il mio puntatore punta l'ultimo byte+1 della stringa da trasmettere disabilito la serialebisogna disabilitare la seriale perche' essa continua a sparare fuori dei caratteri 0h in eterno.il tutto essendo temporizzato dal sistema stesso funziona alla perfezione.chiaramente chi riceve deve essere pronto.ciaodario Link to comment Share on other sites More sharing options...
walterword Posted August 12, 2004 Report Share Posted August 12, 2004 ciao Dario intanto grazie per l'aiuto e l'interesse ho fatto cosi :uso l'overflow del timer 2 , settato a circa 150 ms nell'interrupt spedisco col comando printf un array di caratteri precedentemente caricati con i dati che leggo dai devices in I2C Nel Pc , tramite timer , ogni 150 ms faccio la lettura del buffer di sicezione e poi butto la visualizzazione sembrerebbe che non faccia una piega . adesso sto preparando altri 2 nodi slaves , solo che pero ho solo 3 Max485 porca miseria Dovro fare entrare in scena il rabbit che ha gia a bordo i driver del Rs485 , che sara il master dei 2 nodi e poi sempre il rabbit sara server della rete ethernet con pc client devo riuscire a far girare almeno una decina di bytes nella rete composta da 3 protocolli e cioe I2C all'interno dei nodi , rs485 modbus tra nodi slaves e master e tcp\ip modbus tra rabbit e pcPoi potro considerare gli esperimenti ed i risultati , buoni per le mie conoscenze e capacita in materia di micro e telecomunicazioni .poi dovrei riuscire a creare un sito in asp.net e pilotare il tutto da internet , ed archiviero queste ricerche ed esperimenti nel mio curriculum , magari in attesa di richieste particolari Poi dovro anche iniziare a far qualcosa per lavoro , visto che mi stan gia martellando Una volta infarinato coi pic , vorrei conoscere meglio i rabbit e magari perche no anche il mitsubishi e lo zilog , mi piace la storiella che si possan fare tante cose ciao dario e di nuovo graziewalter Link to comment Share on other sites More sharing options...
walterword Posted August 13, 2004 Report Share Posted August 13, 2004 ok ho rivisto tutto l'hw , praticamente e' cosi composto , ho appena finito di montarlo -NODO1----- PIC16F876 + PCF8591(5 analog,4 in +1 out ) + PCF8574(configurato in 4 input + 4 output) -NODO2----- PIC16F876 + PCF8591(5 analog,4 in +1 out ) + PCF8574(8 input) + PCF8574(output)ho gia montato e collegato i rispettivi max485 in ogni scheda Domani faro delle prove in Rs485 , dalla scheda 1 alla scheda2 Se funziona entra in scena il rabbit che sara il master delle 2 .Ciao walter Link to comment Share on other sites More sharing options...
dlgcom Posted August 13, 2004 Report Share Posted August 13, 2004 Bene Walter ,Io invece ho risolto i miei problemi con il Rabbit , adesso va che e' una meraviglia...Iniziero a fare le prove di comunicazione tra pic e Rabbit in 485. Link to comment Share on other sites More sharing options...
walterword Posted August 13, 2004 Report Share Posted August 13, 2004 ho visto degli esempi che trattano di come utilizzare l'interrupt del buffer di ricezione e trasmissione potresti delucidarmi in proposito ?grazie walter Link to comment Share on other sites More sharing options...
dlgcom Posted August 13, 2004 Report Share Posted August 13, 2004 bisogna disabilitare la seriale perche' essa continua a sparare fuori dei caratteri 0h in eternoNel pic no, basta non scrivere niente nel registro di tx .ho provato anche l'interrupt quando il buffer di trasmissione e' vuoto ma e' troppo veloce mi impalla tutto ed arrivano dati bruttissimiMa quanti dati devi scrivere ? , perche' se non sono molti potresti fare un loop di trasmissione.oppure creare una routina di interrupt a tempo per trasmettere i dati ad intervalli regolari , mantenedo libero il loop principale.Altra cosa, se i tuoi pic sarano slave del Rabbit, io associerei la trasmissione all' interrupt di ricezione della seriale.Se spieghi un po' il tuo ciclo , ti posso dare una mano. Link to comment Share on other sites More sharing options...
walterword Posted August 13, 2004 Report Share Posted August 13, 2004 (edited) ho chiesto anche la collaborazione del gentile dario valeri in sostanza vorrei implementare un protocollo modbus , con un buffer di al massimo 20 byte per ogni slave.Pero adesso a parte il modbus vorrei comunicare semplicemente cosi senza processare il buffer lo faro dopo esser sicuro la comunication funzioni , pensavo di fare cosi :#define DEtrasm output_high(PIN_C2)char buffer[20];int count=0;main(){buffer[0]='A';buffer[1]='B';..............buffer[19]='W'; if(condizione per trasmettere oppure sempre ) { DEtrasm; putchar[buffer[count]; }}#int_TBE //interrupt quando e' stato spedito un byte TBE_isr() {count++;if(count==19){count=0;}}poi dovro fare un qualcosa di simile anche con l'interrupt di ricezionenella guida del PCM non c'e' molto materiale per capire bene , comunque credo non sia proprio cosi complicato cosa ne dite , secondo voi potrebbe funzionare ??dunque adesso devo provare tra 2 pic , di cui uno master e l'altro slave , ho gia montato i Max485 e collegato il DE (driver eneble) che dovra essere a 1 quando devo trasmettere e 0 in ricezione quindi lo slave sara a 0 il DE .Il master lo mette a 1 e poi nel main loop inizia a spedire un byte del buffer precedentemente caricato a dovere in altre routine .L'interrupt mi dice che il byte e' stato spedito , cosi incremento il puntatore al byte successivo e cosi ritorno nel loop main e scrivo il 2° byte , e via fintanto che non arrivo con l'indice a 19 e lo azzero .Ho usato anche una macro giusto per provare se funziona (DEtrasm )cosa dite , e' una logica farlocca o potrebbe con qualche accorgimento stare in piedi ???ciao e graziewalterp.s. poi entrera in scena il Rabbit e sara lui il master e i due Pic i relativi slaves , con la loro circuiteria internaquindi 2 PIC dovranno ricevere le richieste del master e risponderesemplice no ? Edited August 13, 2004 by walterword Link to comment Share on other sites More sharing options...
dlgcom Posted August 13, 2004 Report Share Posted August 13, 2004 Funziona , ma io non la metterei nel main.Io farei una routine di trasmissione per inviare i 20 byte e questa routine sarebbe scatenata da un evento a tua scelta oppure a tempo con l'interrupt di un timer .Calcola che a 19200 bit/s , per trasmettere un byte ci impieghi 0,00046 sec x 20 = 0,0095 sec.Io uso un loop e solo controllo il flag di avvenuta trasmissione .Se vuoi il ccs ha una libreria pronta per 485, si chiama rs485.c .Se non la trovi te la mando. Link to comment Share on other sites More sharing options...
walterword Posted August 13, 2004 Report Share Posted August 13, 2004 (edited) si questa libreria la cercavo anche ieri dove dal sito CCs dicono che sia nella cartella Exaples o driversBe ci sono un sacco di esempi , driver ect ma questa non c'e '.Se me la mandi mi fai un favore graziewalter Edited August 13, 2004 by walterword Link to comment Share on other sites More sharing options...
walterword Posted August 13, 2004 Report Share Posted August 13, 2004 i giorni ch emi rimanogno devo poi dedicarli al rabbit , ho gia una dll che avevo scritto per modbus tcp\ip cosi vedo di implementare anche il modbus tcp\ip anche sul rabbit una volta finita con questa rs485 devo fare anche delle prove con web server e rabbit . il tempo stringe ciao Link to comment Share on other sites More sharing options...
dlgcom Posted August 13, 2004 Report Share Posted August 13, 2004 Â Â for(i=0,cs=rs485_id^to^len; i<len; i++) { Â Â Â Â Â cs^=*data; Â Â Â Â Â fputc(*data,RS485_CD); Â Â Â Â Â ++data; Â Â Â }Questo e' quello che fa il driver 485.... Link to comment Share on other sites More sharing options...
walterword Posted August 13, 2004 Report Share Posted August 13, 2004 be devo ancora approfondire alcuni concetti del Cper esempio un ciclo For cosi composto non l'ho mai usatocon gli Xor e con 2 variabili cioe "i" e "cs" sarebbe bello saperne qualcosa di piu Ho scaricato un dossier di centinaia di pagine , si chiama trickyC e' scritto da un tipo in gamba in italiano Tratta del linguaggio e , delle direttive al compilatore ect Ho stampato le pagine fintanto che non si addentravano all'uso delle librerie del dos Niente male Link to comment Share on other sites More sharing options...
walterword Posted August 13, 2004 Report Share Posted August 13, 2004 (edited) #define RS485_RX_ENABLE PIN_B5 usa anche l'abilitazione della ricezione ?io sulla basetta i due pin relativi del max485 li ho messi insieme e ho solamente il DE quindi devo scollegare il ponticello ed usare un'altra uscita del Pic per questo scopo?ma tutti quei #if ....#else ect nel codice a cosa servono forse in fase di debug ?certo che pero ho visto un po cosi la libreria , mica male quindi la devo includere nel file del mio progetto e poi utilizzare com ein tutti i linguaggi le sue funzioni correggendo in base alle mie configurazioni hw gli eventuali #define sui pin Di tutte le funzioni , presumo che la prima da richiamare sia init() prima di entrare nel loop main , o sbaglio ? Edited August 13, 2004 by walterword Link to comment Share on other sites More sharing options...
dlgcom Posted August 13, 2004 Report Share Posted August 13, 2004 Se non lo usi , lo puoi eliminare dalla dichiarazione  #define RS485_RX_PIN    PIN_B0  #define RS485_TX_PIN    PIN_B3  #define RS485_ENABLE_PIN  PIN_B4  //controls DE pin.  low for RX, high for TX //  #define RS485_RX_ENABLE   PIN_B5  //controls RE pin.  should keep lE usare solo il pin di tx Link to comment Share on other sites More sharing options...
walterword Posted August 13, 2004 Report Share Posted August 13, 2004 cioe quando il De e' alto abilito la trasmissione mentre quando e' basso sono in ricezione giusto ? funziona cosi 'ciao walter Link to comment Share on other sites More sharing options...
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