Tous les messages (vince34)|
|
Re: nuelectronics Ethernet Shield |
||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
Aspirant
![]()
Inscrit:
03/03/2008 14:16 De 34130
Groupe :
Utilisateurs enregistrés Automaticien Messages:
95
Niveau : 8
HP : 0 / 193
![]() |
Pas de shield ethernet pour moi. Je suis basé sur les composants/modules ETT, dispos chez futurlec.
A mon avis, pas la peine de se prendre la tete avec des machines à états TCP. Il faut rester simple, surtout avec l'arduino et sa mémoire. just répondre aux requetes HTTP en 1 page et envoyer brut de fonderie les données en UDP. J'oubliais: pour voir le résultat c'est là: http://thinselin.homeftp.net/secret Et pour la commande UDP, celle ci-dessus, en changeant l'IP. Amusez-vous à changer l'état en UDP et à visualiser en HTTP :) Avec cette adresse, vous arrivez la-dessus: ![]() On voit bien le module stamp, le module ethernet, et sur la droite de la plaquette le DS1307 (avec son quartz) et DS1631. Le tout est derrière un routeur. J'utilise le compilo winAVR (version portable sur clef USB) + AVRLib Voila !
Posté le : 08/10/2008 14:17
|
||||||||||
Transférer
|
|||||||||||
|
|
Re: nuelectronics Ethernet Shield |
||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
Aspirant
![]()
Inscrit:
03/03/2008 14:16 De 34130
Groupe :
Utilisateurs enregistrés Automaticien Messages:
95
Niveau : 8
HP : 0 / 193
![]() |
Ca y est
J'y suis aussi arrivé de mon coté: Pour le moment, j'ai un serveur HTTP sur le port 80, un serveur UDP sur le port 1201 pour savoir la version du chip, et un sur le port 1200 pour controler une sortie: En ligne de commande pour l'UDP: F:\Projects\udpcom\win>udpcom-XP.exe -p 1200 secr,t=? 192.168.2.26 II: data: secr,t=?, ip: 192.168.2.26 port: 1200 OK: 192.168.2.26: e=invalid_pw F:\Projects\udpcom\win>udpcom-XP.exe -p 1201 version 192.168.2.26 II: data: version, ip: 192.168.2.26 port: 1201 OK: 192.168.2.26: ver=B4 F:\Projects\udpcom\win>udpcom-XP.exe -p 1200 secret,t=? 192.168.2.26 II: data: secret,t=?, ip: 192.168.2.26 port: 1200 OK: 192.168.2.26: t=1 F:\Projects\udpcom\win>udpcom-XP.exe -p 1200 secret,t=0 192.168.2.26 II: data: secret,t=0, ip: 192.168.2.26 port: 1200 OK: 192.168.2.26: t=0 F:\Projects\udpcom\win>udpcom-XP.exe -p 1200 secret,t=1 192.168.2.26 II: data: secret,t=1, ip: 192.168.2.26 port: 1200 OK: 192.168.2.26: t=1 F:\Projects\udpcom\win>udpcom-XP.exe -p 1200 secret,t=? 192.168.2.26 II: data: secret,t=?, ip: 192.168.2.26 port: 1200 OK: 192.168.2.26: t=1 Et sur le port 80: Output is: ON [refresh status] Switch off version 2.10, tuxgraphics.org Merci tuxgraphics pour le code !! Moi qui pensais m'occuper de la partie ethernet plsu tard, je crois que je vais m'y mettre de suite :) voici l'init du prog de test qui m'a aidé à debugger ce satané chipset (OK, je n'avais pas cablé le CS comme il fallait....): INIT I2C INIT TEMP DS1631 initialized DS1631 Config register: 152 DS1631_CONFIG_1SHOT: 0 DS1631_CONFIG_R0: 0 DS1631_CONFIG_R1: 1 DS1631_CONFIG_POL: 0 DS1631_CONFIG_DONE: 1 DS1631_CONFIG_TLF: 0 DS1631_CONFIG_THF: 0 DS1631_CONFIG_NVB: 1 INIT RTC DS1307 detected 1 23/10/75 14:30:00 ENC28J60 revision: 4 Et le temps de réponse du bestiau: F:\Projects\udpcom\win>ping 192.168.2.26 Pinging 192.168.2.26 with 32 bytes of data: Reply from 192.168.2.26: bytes=32 time=9ms TTL=64 Reply from 192.168.2.26: bytes=32 time=9ms TTL=64 Reply from 192.168.2.26: bytes=32 time=8ms TTL=64 Reply from 192.168.2.26: bytes=32 time=8ms TTL=64 Ping statistics for 192.168.2.26: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 8ms, Maximum = 9ms, Average = 8ms Honnete, et le tout stable depuis hier soir. A noter la taille du code, juste avec stack TCP/UDP, I2C (RTC + temp), printf, uart : Size after: text data bss dec hex filename 0 16486 0 16486 4066 enc28j60tst.hex Donc ca bouffe pas mal. Mais c'est optimisable (chaines de car en RAM, pour les tests....) Je suis tout content ![]()
Posté le : 08/10/2008 12:32
|
||||||||||
Transférer
|
|||||||||||
|
|
Re: nuelectronics Ethernet Shield |
||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
Aspirant
![]()
Inscrit:
03/03/2008 14:16 De 34130
Groupe :
Utilisateurs enregistrés Automaticien Messages:
95
Niveau : 8
HP : 0 / 193
![]() |
Citation :
Un mix des deux serait l'idéal. C'est du reste ce que je vais faire: une page minimaliste en "serveur" qui donne l'état de toutes les E/S + possibilité de faire on/off + envoi périodique (en UDP par exemple) des données. Le problème du mode client tel que tu le décrit: comment l'arduino mets-t-il les E/S à jour vu qu'il ne fait qu'envoyer des infos. Il doit bien en recevoir ? don cun mode serveur est tout de même nécessaire, sans avoir a retourner de pages. L'arduino donc donc écouter sur un port TCP/UDP.
Posté le : 07/10/2008 13:25
|
||||||||||
Transférer
|
|||||||||||
|
|
Re: Résumé sur le matériel et l'environnement de développement |
||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
Aspirant
![]()
Inscrit:
03/03/2008 14:16 De 34130
Groupe :
Utilisateurs enregistrés Automaticien Messages:
95
Niveau : 8
HP : 0 / 193
![]() |
Citation :
|
||||||||||
Transférer
|
|||||||||||
|
|
Re: Résumé sur le matériel et l'environnement de développement |
||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
Aspirant
![]()
Inscrit:
03/03/2008 14:16 De 34130
Groupe :
Utilisateurs enregistrés Automaticien Messages:
95
Niveau : 8
HP : 0 / 193
![]() |
Pour la partie matérielle, je fais "bande à part".
Par contre, pour la partie CAO, je suis sous KiCAD. J'ai regardé du coté d'eagle, cadstar et autres.... trop de limitation sur les versions "light". Avec KiCAD, tout baigne. Ma V0.9 est sur le point de partir..... la carte processeur est en double face 100x100, et le reste en simple face (puissance/alim et LCD+boutons) Voila voila
Posté le : 29/09/2008 21:39
|
||||||||||
Transférer
|
|||||||||||
|
|
Re: xxx - Interface pH et CO2 |
||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
Aspirant
![]()
Inscrit:
03/03/2008 14:16 De 34130
Groupe :
Utilisateurs enregistrés Automaticien Messages:
95
Niveau : 8
HP : 0 / 193
![]() |
En partant sur du relais, que ca soit du 12/24/220 ca ne pose pas de probleme tant que la carte puissance est bien pensée: juste comme un interrupteur
Posté le : 29/09/2008 21:24
|
||||||||||
Transférer
|
|||||||||||
|
|
Re: [µShark] Pulse Width Modulation |
||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
Aspirant
![]()
Inscrit:
03/03/2008 14:16 De 34130
Groupe :
Utilisateurs enregistrés Automaticien Messages:
95
Niveau : 8
HP : 0 / 193
![]() |
Pour le moment, j'ai deux sorties PWM: 1 pour les LEDs normales, 1 pour le lune. Je définis la puissance (0-100) tous les 1/4 heures. Après,on peut envisager une pondération de la lune en fonction de la date de l'horloge RTC.
V.
Posté le : 29/09/2008 21:22
|
||||||||||
Transférer
|
|||||||||||
|
|
Re: DS1307 RTC I2C |
||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
Aspirant
![]()
Inscrit:
03/03/2008 14:16 De 34130
Groupe :
Utilisateurs enregistrés Automaticien Messages:
95
Niveau : 8
HP : 0 / 193
![]() |
Il réponds bien aux demandes I2C ton ds1307 ?
Je n'ai pas eu de problèmes avec le DS1307. J'ai d'abord utilisé le mini module d'ETT (via futurlec) et en ce moment l'échantillon gratos de maxim est sur ma plaqee d'essai avec juste son petit quartz cylindrique, acheté au magasin d'elec de ma ville. En pull-up j'ai mis du 10K, comme sur la carte ETT. Je suis parti d'une lib, que j'ai mise au format "AVRLib" de Pascal Stang. le fichier .h: #ifndef DS1307_H_ #define DS1307_H_ #define DS1307_I2C_ADDR 0xD0 #define BCD2DEC(x) ((((x >> 4) & 0x0F)*10) + (x & 0x0F)) #define DEC2BCD_HI(x) ((x)/10) #define DEC2BCD_LO(x) ((x)%10) #define DEC2BCD(x) (((DEC2BCD_HI(x)) << 4) + (DEC2BCD_LO(x))) typedef struct { u08 sec ; u08 min ; u08 hr ; u08 day ; u08 dat ; u08 mon ; u08 yr ; } time_t; char ds1307_settime(u08 i2cAddr,time_t time); char ds1307_gettime(u08 i2cAddr,time_t* time); char ds1307_enable(u08 i2cAddr); char ds1307_disable(u08 i2cAddr); char ds1307_24hmode(u08 i2cAddr); char ds1307_12hmode(u08 i2cAddr); // 1 means 12 hours mode // 0 means 24 hours mode char ds1307_get1224mode(u08 i2cAddr); #endif /*DS1307_H_*/ Le .c: /*! \file ds1307.c \brief Dallas DS1307 RTC Driver Library. */ //***************************************************************************** // // File Name : 'ds1307.c' // Title : Dallas DS1307 RTC Driver Library // Author : // Created : // Revised : // Version : 0.1 // Target MCU : Atmel AVR Series // //***************************************************************************** #include <avr/io.h> #include <avr/interrupt.h> #include "global.h" #include "timer128.h" #include "i2c.h" #include "ds1307.h" #include "rprintf.h" char ds1307_settime(u08 i2cAddr, time_t time) { u08 retval= I2C_OK; uint8_t msgbuf[8]; msgbuf[0] = 0x00; // start address msgbuf[1] = DEC2BCD(time.sec); msgbuf[2] = DEC2BCD(time.min); msgbuf[3] = DEC2BCD(time.hr); msgbuf[4] = DEC2BCD(time.day); msgbuf[5] = DEC2BCD(time.dat); msgbuf[6] = DEC2BCD(time.mon); msgbuf[7] = DEC2BCD(time.yr); /* rprintf("SET sec:%d secBCD:%d\n",time.sec,DEC2BCD(time.sec)); rprintf("SET min:%d minBCD:%d\n",time.min,DEC2BCD(time.min)); rprintf("SET hr :%d hrBCD :%d\n",time.hr,DEC2BCD(time.hr)); rprintf("SET day:%d dayBCD:%d\n",time.day,DEC2BCD(time.day)); rprintf("SET dat:%d datBCD:%d\n",time.dat,DEC2BCD(time.dat)); rprintf("SET mon:%d monBCD:%d\n",time.mon,DEC2BCD(time.mon)); rprintf("SET yr :%d yrBCD :%d\n",time.yr,DEC2BCD(time.yr)); */ retval=i2cMasterSendNI(i2cAddr, 8, msgbuf); if (retval == I2C_OK) { return true; } else {//I2C_ERROR_NODEV return false; } } char ds1307_gettime(u08 i2cAddr, time_t* time) { uint8_t msgbuf[7]; u08 retval= I2C_OK; // send the "set position" msgbuf[0]=0x00; retval=i2cMasterSendNI(i2cAddr, 1, msgbuf); // read the results retval=i2cMasterReceiveNI(i2cAddr, 7, msgbuf); /* rprintf("\nDS1307 GET BCDsec :%d sec :%d\n",msgbuf[0],BCD2DEC(msgbuf[0])); rprintf("DS1307 GET BCDmin :%d min :%d\n",msgbuf[1],BCD2DEC(msgbuf[1])); rprintf("DS1307 GET BCDhr :%d hr :%d\n",msgbuf[2],BCD2DEC(msgbuf[2])); rprintf("DS1307 GET BCDday :%d day :%d\n",msgbuf[3],BCD2DEC(msgbuf[3])); rprintf("DS1307 GET BCDdate:%d date :%d\n",msgbuf[4],BCD2DEC(msgbuf[4])); rprintf("DS1307 GET BCDmon :%d mon :%d\n",msgbuf[5],BCD2DEC(msgbuf[5])); rprintf("DS1307 GET BCDyr :%d yr :%d\n",msgbuf[6],BCD2DEC(msgbuf[6])); */ time->sec = BCD2DEC (msgbuf[0]); time->min = BCD2DEC (msgbuf[1]); time->hr = BCD2DEC (msgbuf[2]); time->day = BCD2DEC (msgbuf[3]); time->dat = BCD2DEC (msgbuf[4]); time->mon = BCD2DEC (msgbuf[5]); time->yr = BCD2DEC (msgbuf[6]); if (retval == I2C_OK) { return true; } else {//I2C_ERROR_NODEV return false; } } char ds1307_enable(u08 i2cAddr) { u08 retval= I2C_OK; uint8_t msgbuf[2]; msgbuf[0]=0x00; // set the position register retval=i2cMasterSendNI(i2cAddr, 1, msgbuf); // read the secs field, contains the CH bit retval=i2cMasterReceiveNI(i2cAddr, 1, msgbuf); // Write new value to 0x00 only if needed if ( !(msgbuf[0] & _BV(7)) ){ msgbuf[1]=msgbuf[0]; //rprintf("DS1307 already enabled:%d\n",msgbuf[1]); } else{ msgbuf[1] = msgbuf[0] &~_BV(7); //rprintf("DS1307 needs to be enabled:%d\n",msgbuf[1]); } msgbuf[0]=0x00; retval=i2cMasterSendNI(i2cAddr, 2, msgbuf); if (retval == I2C_OK) { return true; } else {//I2C_ERROR_NODEV return false; } } char ds1307_disable(u08 i2cAddr) { u08 retval= I2C_OK; uint8_t msgbuf[2]; // Get the existing conf msgbuf[0]=0x00; retval=i2cMasterSendNI(i2cAddr, 1, msgbuf); // read the secs field, contains the CH bit retval=i2cMasterReceiveNI(i2cAddr, 1, msgbuf); // Write new value to 0x00 msgbuf[1] = msgbuf[0] | _BV(7); msgbuf[0]=0x00; retval=i2cMasterSendNI(i2cAddr, 2, msgbuf); if (retval == I2C_OK) { return true; } else {//I2C_ERROR_NODEV return false; }} char ds1307_24hmode(u08 i2cAddr){ u08 retval= I2C_OK; uint8_t msgbuf[2]; // set the position register msgbuf[0]=0x02; retval=i2cMasterSendNI(i2cAddr, 1, msgbuf); // read the hours field, contains the 12/24 bit (6th bit in register) retval=i2cMasterReceiveNI(i2cAddr, 1, msgbuf); // Write new value to 0x02 : clear bit 6 msgbuf[1] = msgbuf[0] &~( ( 1 ) << 6); msgbuf[0]=0x02; //rprintf("Sending 24h mode byte %d\n",msgbuf[1]); retval=i2cMasterSendNI(i2cAddr, 2, msgbuf); if (retval == I2C_OK) { return true; } else {//I2C_ERROR_NODEV return false; } } char ds1307_12hmode(u08 i2cAddr){ u08 retval= I2C_OK; uint8_t msgbuf[2]; // set the position register msgbuf[0]=0x02; retval=i2cMasterSendNI(i2cAddr, 1, msgbuf); // read the hours field, contains the 12/24 bit (6th bit in register) retval=i2cMasterReceiveNI(i2cAddr, 1, msgbuf); // Write new value to 0x02: set bit 6 msgbuf[1] = msgbuf[0] | ( 1 ) << 6; msgbuf[0]=0x02; //rprintf("Sending 12h mode byte %d\n",msgbuf[1]); retval=i2cMasterSendNI(i2cAddr, 2, msgbuf); if (retval == I2C_OK) { return true; } else {//I2C_ERROR_NODEV return false; } } // 1 means 12 hours mode // 0 means 24 hours mode char ds1307_get1224mode(u08 i2cAddr){ u08 retval= I2C_OK; uint8_t msgbuf[2]; // set the position register msgbuf[0]=0x02; retval=i2cMasterSendNI(i2cAddr, 1, msgbuf); // read the hours field, contains the 12/24 bit (6th bit in register) retval=i2cMasterReceiveNI(i2cAddr, 1, msgbuf); return msgbuf[0]&_BV(6); } Et pour finir, l'init de l'automate: void ds1307start(void) { time_t time; if (ds1307_enable(DS1307_I2C_ADDR)) { time = ds1307update(); ds1307_24hmode(DS1307_I2C_ADDR); #ifdef DEBUG_TIME rprintf ("Mode: %d\n",ds1307_get1224mode(DS1307_I2C_ADDR)); #endif ds1307_settime(DS1307_I2C_ADDR, time); rprintfProgStr(PSTR("DS1307 detected")); rprintfCRLF(); } else { rprintfProgStr(PSTR("Cannot detect DS1307 !")); rprintfCRLF(); return; } } Je peut pas faire plus. En ce moment je me prends la tete sur la partie ethernet et je suis dans le ![]()
Posté le : 29/09/2008 21:14
|
||||||||||
Transférer
|
|||||||||||
|
|
Re: nuelectronics Ethernet Shield |
||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
Aspirant
![]()
Inscrit:
03/03/2008 14:16 De 34130
Groupe :
Utilisateurs enregistrés Automaticien Messages:
95
Niveau : 8
HP : 0 / 193
![]() |
Ce que tu peut faire, c'est router un port (et non une IP) vers une IP locale. Tu n'es joignable que sur ton @IP publique, qui est accrochée à ton routeur, sur son coté externe. En interne tu es dans une zone privée (192.168.xxx.yyy ou 10.xxx.yyy.zzz).
Ce qu tu peut dire à ta box (je connais pas la 9box, je susi free), c'est: si tu recois une requete sur le port 8092 alors, fait suivre cette requete sur le réseau interne à l'adresse 192.168.1.2 C'est du "port forwarding" pour les anglophones. Autre solution plus violente: l'option DMZ (si elle existe): tout traffic entrant est renvoyé vers l'adresse IP privée que tu veux.... ca peut servir pour etre sur que le problème ne vient pas des ports utilisés. a+
Posté le : 18/09/2008 16:34
|
||||||||||
Transférer
|
|||||||||||
|
|
Re: nuelectronics Ethernet Shield |
||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
Aspirant
![]()
Inscrit:
03/03/2008 14:16 De 34130
Groupe :
Utilisateurs enregistrés Automaticien Messages:
95
Niveau : 8
HP : 0 / 193
![]() |
L'adresse MAC n'est utilisée que pour les connexions "locales"
. L'adresse MAC de ton PC / shield ethernet ne sort jamais de chez toi. C'est celle de ton routeur qui se ballade jusqu'au routeur suivant, etc etc..... Bref. Pour ce qui est de l'envoi de mail, il faut causer le protocole SMTP avec le serveur en face , avec ses variantes sécurisées, selon le fournisseur en face. Les serveurs SMTP ont des @IP fixes (smrp.free.fr, smtp.gmail.com, ...) donc codables en dur (ou mieux, en eeprom). Donc pas de soucis. Le problème avec SMTP, et autres, c'est la place en mémoire du code pour gérer tout ça ! L'arduino est assez limité (et le Mega128 sur lequel je travaille aussi..... c'est pour dire). Mon orientation: l'automate envoi en UDP brut de fonderie des messages en broadcast (à tout le monde) sur le réseau local. Chaque machine du réseau (un PC, un NAS, un autre autoamte) peut alors écouter et faire ce qu'il veut: envoyer un mail, archiver els données, etc etc.... Mon rêve: un automate qui réponde aux requetes SNMP (protocole utilisé pour interroger un équipement sur son état actuel. Très utilisé pour surveiller des équipemetns réseau/télécom.... voir résultats avec mrtg, cacti, .....). Mais la aussi il faut implémenter le SNMP. Microchip donne un exemple pour son ENC28J60 sur lequel je me base, mais bon. On va commencer soft avec le broadcst UDP.... En ce moment, je bosse sur mes PCB: - Un principal avec le µP, la partie pH, et des connecteurs vers els autres cartes (double face, 95mm*95mm) - Un qui suporte LCD + boutons (simple face) - Un qui supporte les relais + alims (+5,-5,+12) en simple face Je vérifie tout, j'adapte aux composants que j'ai en stock, j'optimise encore un peu le placement/routage et j'envoi la fabrication du proto 1 !! A+
Posté le : 18/09/2008 16:26
|
||||||||||
Transférer
|
|||||||||||
|
|
Re: Proto |
||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
Aspirant
![]()
Inscrit:
03/03/2008 14:16 De 34130
Groupe :
Utilisateurs enregistrés Automaticien Messages:
95
Niveau : 8
HP : 0 / 193
![]() |
Il s'agit d'un forum electronique pour les automates gérant les bacs, donc je suis bien ou il faut ! Il ne s'agit ni de l'automate a base d'arduino, ni du glowbit. Juste de mon automate en cours de réalisation.
Concernant Proteus, je ne l'ai pas essayé. J'ai regardé du coté d'Eagle et de CadStar mais la version "light" est trop limitée (taille PCB pour eagle, nbr de composants/trous pour cadstar). KiCAD est gratuit et sans limites (GPL) et possède de nombreuses librairies. Seul l'autorouteur est moyen (je fasi mieux que lui en simple-face). Ayant totu fait sosu KiCAD je n'en changerai pas maintenant. Peut-etre pour un autre projet... à voir. A+
Posté le : 08/09/2008 09:31
|
||||||||||
Transférer
|
|||||||||||
|
|
Proto |
||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
Aspirant
![]()
Inscrit:
03/03/2008 14:16 De 34130
Groupe :
Utilisateurs enregistrés Automaticien Messages:
95
Niveau : 8
HP : 0 / 193
![]() |
Bonjour !
Bon, marre de faire du C .... :) Je fais mes premiers pas avec KiCAD et c'est assez rigolo. Voici mes premiers résultats. L'autorouteur est nul en simple-face. A la mano ca le fait bien. Par contre, sur le double-face c'est OK. Il me reste à faire un belle alim +5/-5 : des suggestions ? Vous voyez des problèmes potentiels sur le design ? Pour réaliser les PCB double-face, idéalement trou métal, vous faites ca chez qui ? V.
Posté le : 07/09/2008 13:45
|
||||||||||
Transférer
|
|||||||||||
Menu Principal
Forums






Transférer


, soit il y a un script qui tourne sur un PC et qui consulte régulièrement l'ARDUINO. La seule solution que je vois c'est un script type CGI qui s'exécute a intervalle régulier sur un serveur internet. J'ai regardé un peu comment faire et d'1 ça n'a pas l'air simple, de 2 je ne suis pas certain que tout le monde disposera d'un seveur acceptant les scripts CGI.

Boards.zip