Corrupte data P1 poort aan arduino

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Robbiedobbie
  • Registratie: Augustus 2009
  • Laatst online: 06-10 22:17
Momenteel ben ik aan het proberen om dmv een arduino (zit te twijfelen tussen uno en mega ivm toekomstige uitbreidingen. Heb op beide geprobeerd of alles werkt) de P1 poort van mijn energie meter uit te lezen. De energie meter is een "Iskra ME382".

Ik dacht dat het niet al te moeilijk zou zijn. Ik heb de request pin aan een willekeurige vrije digitale pin van de arduino gehangen, ground aangesloten, en de Tx van de P1 poort aan een digitale poort met interrupt ondersteuning gehangen. Daarbij maak ik gebruik van SoftwareSerial met inverted logic om alles uit te lezen. (De meter output op 9600 baud.)

In een kleine test ging dit perfect, en ik dacht dan ook dat het erg makkelijk en snel zou worden om dit via netwerk door te sturen. Nu heb ik echter het probleem dat wanneer ik daadwerkelijk netwerk communicatie heb draaien, dat de data die van de meter komt corrupt is. Steeds willekeurige delen van het bericht raken corrupt (Sommige delen komen wel compleet door). Ik heb al gekeken of er poorten clashen, maar dit is niet het geval. Bijv op de uno gebruikt het ethernet shield poort 4 (SD select), poort 10 (eth select), en 11,12 en 13 voor SPI. Ik had om die reden mijn rx op 6 en mijn select op 7.

Nu dacht ik dat ik het probleem misschien kon omzeilen door zelf een inverter op het signaal te zetten en dan RX (poort 0) te gebruiken. Helaas lukt het me niet om een werkende inverter te maken. Ik heb dit schema geprobeerd:

Afbeeldingslocatie: http://iproto.nl/uploads/Ian/p1_uitlezen_arduino_BC574.jpg waarbij ik ipv de BC574, een 2N2222 heb gebruikt. Dit aangezien ik de BC574 niet in huis had.

Ik kreeg echter totaal geen data door (alleen corrupte chars bij in/uit pluggen van de p1 poort). Bij dit schema loopt geel naar poort 8, maar deze heb ik naar 0 gedaan voor de hardware serial te gebruiken. Ook had ik ipv 5v poort 7 gebruikt.

Iemand enig idee hoe ik of de inverter of de software serial werkend kan krijgen? (Ik heb geen idee hoe het kan dat hij corrupte data doorkrijgt alleen tijdens netwerk gebruik :S)

Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • AllesKan
  • Registratie: Juli 2011
  • Laatst online: 29-05-2023
Heb je hiermee rekening gehouden?

Afbeeldingslocatie: https://upload.wikimedia.org/wikipedia/commons/a/ae/2N2222%2C_PN2222%2C_and_P2N2222_BJT_Pinout.jpg

En die 1K weerstand moet ook weg.

Je BC547 in de tekening komt overeen met de P2N2222A. Die zitten beiden verkeerd om aangesloten.

Je zou het moeten aansluiten zoals je hebt getekend, maar dan zonder de 1K weerstand (overbruggen) en met de linker 2N2222 in de plaats.

[ Voor 48% gewijzigd door AllesKan op 09-07-2015 17:06 ]


Acties:
  • 0 Henk 'm!

  • Robbiedobbie
  • Registratie: Augustus 2009
  • Laatst online: 06-10 22:17
Ik heb de gewone 2N2222A, niet de P2n2222A. Ook heb ik al geprobeerd die 1k weerstand weg te doen. Dit maakte geen verschil :'(

Whoops, nvm, ik ga het eens proberen. Dit zal namelijk nogal een verschil maken ;)

[ Voor 27% gewijzigd door Robbiedobbie op 09-07-2015 17:08 ]


Acties:
  • 0 Henk 'm!

  • AllesKan
  • Registratie: Juli 2011
  • Laatst online: 29-05-2023
Maak van die 10K aan de basis dan eens 1K (zonder die andere 1K erin, de emitter moet gewoon rechtstreeks aan massa)

[ Voor 47% gewijzigd door AllesKan op 09-07-2015 17:09 ]


Acties:
  • 0 Henk 'm!

  • Robbiedobbie
  • Registratie: Augustus 2009
  • Laatst online: 06-10 22:17
In test programmatje wat puur de serial 1 van mijn mega uitleest en naar Serial0 gooit, lijkt het nu te werken. Ik heb nu 1.3k ohm tussen 5v en de collector gezet, 1.3 ohm op de base, en geen weerstand tussen ground en emitter. De signaal kabel naar de arduino is direct op de collector aangesloten en de P1 rx is op de base aangesloten.

Nu nog kijken of het in mijn grotere ethernet software ook werkt, maar ik verwacht van wel :D

Acties:
  • 0 Henk 'm!

  • Robbiedobbie
  • Registratie: Augustus 2009
  • Laatst online: 06-10 22:17
Ok, te vroeg gejuicht...

Ik had om mijn inverter te testen zonder continu in mijn meterkast te moeten staan mijn uno gebruikt als mocking device. De uno deed een P1 telegram via software serial uitzenden naar mijn mega. Op de mega had ik dan de inverter gebruikt om het signaal uitgestuurd door de uno om te zetten naar geldige tx voor op de rx1 poort.

Nu werkt dit, wat duidelijk maakt dat mijn inverter goed in elkaar steekt. Echter wanneer ik op de echte meter probeer, dan werkt het niet. De 3 kabels die ik naar de uno had geleidt (request als vin, ground als ground en tx vanuit poort 11) heb ik dan precies goed aansluit op de rj11 stekker.

Nu zat ik zelf al te denken dat het signaal op tx vanuit de meter misschien te zwak is, en heb daarom ook geprobeerd met een lagere weerstand van 800 ohm. Ook dit werkt niet.

Hier staan een paar foto's van hoe ik de schakeling heb gemaakt: https://goo.gl/photos/nvV7GQMR9sAemfuf7

Wie o wie ziet/weet wat ik fout doe en kan me verder helpen?

Acties:
  • 0 Henk 'm!

  • roelke
  • Registratie: Juli 2005
  • Laatst online: 18:10
En je weet zeker dat de aders in de RJ11 ook goed contact maken met de de pinnetjes van de connector ? Ik vind ze erg kort namelijk.
Normaal horen ze helemaal tot het einde van de connector te lopen

I've GoT a solution


Acties:
  • 0 Henk 'm!

  • insan1ty
  • Registratie: Oktober 2001
  • Laatst online: 15-03-2023
Waarom gebruik je geen hardware UART? Ik ken de Arduino niet, maar ik kan me voorstellen dat als je je seriële data in software uitleest, dat je timingproblemen krijgt door de communicatie over je netwerk met corrupte data als gevolg.

Acties:
  • 0 Henk 'm!

  • Robbiedobbie
  • Registratie: Augustus 2009
  • Laatst online: 06-10 22:17
roelke schreef op donderdag 09 juli 2015 @ 23:42:
En je weet zeker dat de aders in de RJ11 ook goed contact maken met de de pinnetjes van de connector ? Ik vind ze erg kort namelijk.
Normaal horen ze helemaal tot het einde van de connector te lopen
De aders maken zeker goed contact. Wanneer ik de kabel gebruik met software serial (zonder iets anders erbij op arduino) doet deze het perfect. Ook wanneer ik mijn mockarduino erop aansluit via de netwerk plig doet alles het goed.
insan1ty schreef op vrijdag 10 juli 2015 @ 01:23:
Waarom gebruik je geen hardware UART? Ik ken de Arduino niet, maar ik kan me voorstellen dat als je je seriële data in software uitleest, dat je timingproblemen krijgt door de communicatie over je netwerk met corrupte data als gevolg.
Software serial was makkelijk vanwege het inverted signaal. Echter ben ik het er mee eens dat het storingsgevoelig is. Om die reden gaan de laatste posts over een inverter die niet wil werken op de energie meter ;) Met werkende inverter gebruik ik namelijk wel de hardware uart.

Acties:
  • 0 Henk 'm!

  • Robbiedobbie
  • Registratie: Augustus 2009
  • Laatst online: 06-10 22:17
Ok, even een update, want ik ben weer een stapje verder heb ik het idee...

Ik heb nog eens goed zitten doormeten, en nu kwam ik erachter dat wanneer de request pin als voeding gebruikt zou worden, dat het voltage op de pin extreem dropte op het moment dat er data vanuit de tx pin terug gezonden zou worden.
Dit komt doordat de weerstanden die ik er nu op had zitten te laag waren. De hoge had ik eerder geprobeerd maar deden het ook niet (Dacht ik...). Blijkbaar had ik toen toch de transistor verkeerd om aangesloten, waardoor alles niet werkte.

Nu heb ik het dus een stapje verder. Ik heb hem nu zowel als het originele schema als zonder de 1k weerstand geprobeerd. Beide hebben hetzelfde effect. Ik krijg duidelijk data binnen, maar het is allemaal verkeerde data.

Dit is de data die ik nu als telegram binnenkrijg (De baudrate staat goed, namelijk op 9600):
code:
1
{s{7{O88wn|nC{o{{O?~sc~~7C_C_C__O777_C_c7_O7n<C{O?|?~Co|?{_{|n<C{O?|?{<8?oC{{|n<C{[?|?~CCCCC{CCO|n<C{[?|?{<88888?88~|nC{o{{O~?8<888{n<C{O??8<8888?wn<C{[??8<8888?88nC{O?8?8<8oooCC{nC{o{{_{O8<~nC{o{{O7O<nC{o{{O7CconO?{~?~Cc_onO?o{O?8<777_Ow7_C_Oww7_7_C__swwwnO?{~?7CcOC~[88888CCo<?8OCO?{~?{?~wnC_[~7[?nO?{~?~?8{s{7{O88wn|nC{o{{O?~sc~~7C_C_C__O777_C_c7_O7n<C{O?|?~Co|?{_{|n<C{O?|?{<8?oC{7|n<C{[?|?~CCCCC{CCO|n<C{[?|?{<88888?88~|nC{o{{O~?8<888{n<C{O??8<8888?wn<C{[??8<8888?88nC{O?8?8<8oooCC{nC{o{{_{O8<~nC{o{{O7O<nC{o{{O7CconO?{~?~Cc_onO?o{O?8<777_Ow7_C_Oww7_7_C__swwwnCO?{~?{?~wnC_[~7[?nO?{~?~?8<~n<

Acties:
  • 0 Henk 'm!

  • Robbiedobbie
  • Registratie: Augustus 2009
  • Laatst online: 06-10 22:17
Helaas heb ik de hardware serial oplossing met de inverter niet meer werkend gekregen.Gelukkig heb ik wel de oorzaak gevonden van de corrupte data op de SoftwareSerial. ik had het Entropy library gebruikt om echt random mac adressen te genereren voor mijn ethernet connection. Deze beinvloed de timers op zo'n manier dat software serial semi willekeurig data gaan missen, waardoor corruptie ontstaat.

Het verwijderen van dit library heeft alles opgelost :D

Acties:
  • 0 Henk 'm!

  • ThinkPad
  • Registratie: Juni 2005
  • Nu online
Been there, done that: Hulp bij slimme meter uitlezen met Arduino naar MySQL

TL;DR: SoftwareSerial niet gebruiken, die is crap voor dit soort 'snelle' baudrates. 'AltSoftSerial' is al een stuk beter, maar ook niet fantastisch. Gewoon de hardware serial gebruiken, dan werkt het prima.

Overigens gebruik ik nu gewoon een P1-USB kabel (zelfgemaakt met cheap PL2303 kabeltje + BS170 transistor + weerstandje, RJ11 eraan geknepen) om de meter uit te lezen. Uitlezing wordt door Domoticz gedaan.

[ Voor 24% gewijzigd door ThinkPad op 14-07-2015 23:13 ]


Acties:
  • 0 Henk 'm!

  • Robbiedobbie
  • Registratie: Augustus 2009
  • Laatst online: 06-10 22:17
9600 baudrate is geen snelle baudrate. Software serial kan deze ondertussen goed aan. (De oude variant had meer moeite, maar ondertussen is SoftwareSerial gebaseerd op newSoftSerial).

Altsoftserial heeft geen ondersteuning voor het inverteren van signaal. Bovendien doet software serial het nu goed.

De hardware serial zou ik graag gebruiken, maar zoals al gezegd lukt het maar niet om de inverter werkend te krijgen. Ook zo'n kabel is niks voor mij, aangezien ik niet van plan ben een raspberry pi of iets dergelijks in de meterkast te zetten. Ik heb daar alleen netwerk beschikbaar, en daar kan ik met de arduino direct naartoe sturen.
Pagina: 1