Arduino Mega slimme meter uitlezen met Solarmeter Harold65

Arduino specifieke Software
Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold

Berichtdoor Koepel » 20 Jul 2019, 21:32

Ja, die pinnen is correct.
Als je zelfs van de Arduino Mega 2560 niets op de seriële monitor ziet, dan is er iets mis.

Advertisement

Gebruikers-avatar
Berichten: 117
Geregistreerd: 10 Jun 2019, 12:16
Woonplaats: Amsterdam

Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold

Berichtdoor master64nl » 20 Jul 2019, 22:02

Of I'm doe. Iets fout?

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold

Berichtdoor Koepel » 21 Jul 2019, 05:38

Ik heb geen idee, het kunnen zoveel dingen zijn.
Daarom heb ik altijd een Arduino Uno in de buurt, om even iets uit te proberen als er iets niet lijkt te kloppen.

Gebruikers-avatar
Berichten: 117
Geregistreerd: 10 Jun 2019, 12:16
Woonplaats: Amsterdam

Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold

Berichtdoor master64nl » 21 Jul 2019, 07:20

Ik heb toch verleden keer die sketch op mijn Mega getest en toen had ik toch gewoon foutloze getallen via die monitor van Arduino? Ik was al driftig aan het zoeken in de posts maar kon zo gauw niets vinden.

Vandaag heb ik geen tijd. Ik zal morgen eens rustig de boel opnieuw proberen. Misschien mezelf een beetje gek gemaakt omdat het niet lukte en dan mis je helikopter view.

Gebruikers-avatar
Berichten: 117
Geregistreerd: 10 Jun 2019, 12:16
Woonplaats: Amsterdam

Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold

Berichtdoor master64nl » 21 Jul 2019, 09:11

In de P1 tester staat dit:

Serial1.begin( 115200); // Voor de P1 poort, alleen RX wordt gebruikt

// Maak pin 13 hoog, die is misschien verbonden met het RTS signaal.
// Bijvoorbeeld als iemand de "P1 poort vertrager" met pin 13 heeft gebruikt.
pinMode( 13, OUTPUT);
digitalWrite( 13, HIGH);
}

Moet ik de 13 veranderen in een 9 als ik die tester wil gebruiken en ik heb op pin 9 een draadje gesoldeerd zitten?

Gebruikers-avatar
Berichten: 117
Geregistreerd: 10 Jun 2019, 12:16
Woonplaats: Amsterdam

Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold

Berichtdoor master64nl » 21 Jul 2019, 10:05

Toch nog even wat getest (ruzie met vrouwlief) :(
Ik zag dat ik in alle drukte gisteren de ground van de P1 uitgang van mijn meter niet op de ground aan het IC had zitten. Dat bied perspectief dacht ik zo. Wel vreemd dat het werkte voor de Mega :?
P1 tester sketch er in gezet en alleen ATmega 32U4 aangesloten met usb kabel, juiste poort en Arduino Leonardo gekozen.
USB erin dus voeding erop. Direct de Arduino monitor aangetikt en in beeld de sketch loopt en getallen maar ze stopte en liepen niet door. Te weinig kennis hoe ik dit moet goed krijgen :?
Dus getallen!
P1 verslomer erin gezet en via de Mega laten lopen. Dan krijg ik niks, ook niet als ik de ATmega 32U4 monitor.

Een heel klein beetje verder. Hopelijk krijg ik tips om verder te gaan, maar dan wel morgen :D

Gebruikers-avatar
Berichten: 117
Geregistreerd: 10 Jun 2019, 12:16
Woonplaats: Amsterdam

Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold

Berichtdoor master64nl » 22 Jul 2019, 08:19

Stap 1:
Ik begin even van voor af aan om de P1 tester sketch in de Mega te zetten met de Arduino monitor aan om te kijken of ik getallen krijg die blijven doorlopen (en niet stoppen zoals gisteren met de ATmega 32U4). Dit is dan mijn basis. Als dit werkt dan zou het in de ATmega 32U4 ook moeten werken.
Stap 2:
Hetzelfde als hierboven met de ATmega 32U4 uitvoeren.

Update:
Stap 1 werkt op de Mega. Mooi lopende getallen elke seconde te zien in de Arduino monitor.
Stap 2 werkt niet op de ATmega 32U4. Je ziet allen maar de melding dat de sketch loopt maar dan gebeurd er helemaal niets. Je ziet ook niet ledjes knipperen zoals op de Mega.

Conclusie is dat de P1 tester sketch niet op de ATmega 32U4 werkt! Tja, dan houd het voor mij toch echt op :?: :?:

Hopelijk ziet iemand ergens in de P1 tester iets staan waardoor dit gebeurd?

Gebruikers-avatar
Berichten: 117
Geregistreerd: 10 Jun 2019, 12:16
Woonplaats: Amsterdam

Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold

Berichtdoor master64nl » 22 Jul 2019, 12:07

Oja, voor die gene die het snappen, dit is de P1 tester van Koepel die goed werkt in een Mega maar niet in een ATmega 32U4 (Leonardo):
Code: Alles selecteren
// P1 poort tester
// ---------------
//
// Board
// -----
//   Arduino Leonardo/Micro/Pro Micro of een andere ATmega32U4.
//   Deze sketch zou zonder wijzigingen op een Arduino Mega 2560
//   kunnen draaien. Dat heb ik nog niet geprobeerd.
//
// Werking
// -------
//   De 115200 8N1 seriele data van de P1 poort wordt ingelezen op pin 0
//   bij een Leonardo of anders de RX pin van Serial1 bij een Mega 2560.
//   Vanzelfsprekend het signaal van de P1 poort inverteren zodat het
//   een normaal serieel signaal wordt met idle hoog en startbit laag.
//   In de seriele monitor wordt het telegram weergegeven.
//   Ze de seriele monitor ook op 115200 baud !
//
// Versies
// -------
//   Versie 1, 20 juni 2019
//     Eerste versie.
//     De CRC berekening werkt, maar testen van verkeerde invoer is niet perfect.
//
// CRC
// ---
//   De CRC is een standaard crc16 vanaf het '/' teken tot en met het '!'.
//   Inclusief die beide tekens zelf en inclusief alle '\r' en '\n'.
//   Na de '!' komt de checksum.
//   Dat zijn altijd 4 hexadecimale cijfers, bijvoorbeeld: 0A89
//
//
 
#include <util/crc16.h>
 
#define BUFFER_SIZE 1024
byte buffer[BUFFER_SIZE];
 
unsigned long previousMillis;
 
unsigned int telegramCount;
unsigned int errorCount;
 
 
void setup()
{
  Serial.begin( 115200);                    // Stel de seriele monitor in op 115200 baud.
  while( !Serial);                          // Wacht totdat de seriele monitor geopend is (Leonardo).
  Serial.println(F( "==================================================="));
  Serial.println( "De sketch \"P1 poort tester\" loopt");
  Serial.println(F( "==================================================="));
 
  Serial1.begin( 115200);                    // Voor de P1 poort, alleen RX wordt gebruikt
 
  // Maak pin 13 hoog, die is misschien verbonden met het RTS signaal.
  // Bijvoorbeeld als iemand de "P1 poort vertrager" met pin 13 heeft gebruikt.
  pinMode( 13, OUTPUT);
  digitalWrite( 13, HIGH);
}
 
 
void loop()
{
  Serial1.setTimeout( 15000UL);              // 15 seconden timeout, een hogere waarde mag ook.
  if( Serial1.find( '/'))                    // zoek het begin van een telegram
  {
    unsigned long currentMillis = millis();   // onthoudt dit tijdstip
    memset( buffer, '\0', BUFFER_SIZE);       // maak buffer schoon, en zorg meteen voor zero-terminator
    buffer[0] = '/';                          // zet de '/' ook nog in de buffer, nodig voor de CRC
    Serial1.setTimeout( 2000UL);             // 2 seconden timeout om de rest van het telegram in te lezen.
    int m = Serial1.readBytesUntil( '!', &buffer[1], BUFFER_SIZE - 2);  // lees tot einde-teken van telegram
 
    if( m > 2)                                // Is er iets ontvangen ? Negeer minder dan 2 bytes
    {
      telegramCount++;                        // hou aantal ontvangen telegrammen bij.
 
      // De '!' is gelezen, maar zit nog niet in de buffer.
      // De '!' is echter wel nodig bij de crc checksum.
      // Na de '!' komen nog 4 cijfers met de checksum, en daarna carriage return en linefeed.
 
      int n = (int) strlen( (char *) buffer); 
      if( n < BUFFER_SIZE - 2)
      {
        buffer[n] = '!';                      // voeg de '!' alsnog toe aan de buffer
        n++;
      }
 
      uint16_t crc = 0;
      for( int i=0; i<n; i++)
        crc = _crc16_update( crc, buffer[i]); // gebruik de standaard crc16
 
      // Lees ook de 4 cijfers van de checksum, en zet die dan meteen om naar een unsigned integer.
      unsigned int crcTelegram = 0xFFFF;      // zomaar een waarde, de 'crc' is al default 0, dus deze anders.
      if( n < BUFFER_SIZE - 5 && Serial1.available() > 4)  // is er nog een checksum ?
      {
        for( int i=0; i<4; i++)               // lees de 4 cijfers van de crc
        {
          buffer[n++] = (byte) Serial1.read();
        }
        sscanf( (char *) &buffer[n-4], "%4x", &crcTelegram);
      }
 
      if( crc != crcTelegram)                 // test de berekende waarde met de ingelezen checksum
      {
        errorCount++;
      }
    }
 
    Serial.println( (char *) buffer);        // Druk het gehele telegram af
 
    Serial.println(F( "---------------------------------------------------"));
    Serial.print(F( "Aantal telegrammen: "));
    Serial.println( telegramCount);
    Serial.print(F( "Waarvan foute CRC : "));
    Serial.println( errorCount);
    Serial.print(F( "Telegram iedere   : "));
    float t = float(currentMillis - previousMillis) / 1000.0;
    Serial.print( t);
    Serial.println(F( " seconden"));
    Serial.println(F( "---------------------------------------------------"));
 
    previousMillis = currentMillis;           // onthouden, de volgende keer wordt verschil berekend.
  }
}

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold

Berichtdoor shooter » 22 Jul 2019, 12:57

ik zie nergens serial1.begin en er zijn verschillen in werking zie hiervoor de arduino.cc site
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 117
Geregistreerd: 10 Jun 2019, 12:16
Woonplaats: Amsterdam

Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold

Berichtdoor master64nl » 22 Jul 2019, 13:29

Hi Shooter, fijn dat je wil meedenken. Je bedoeld hier onder waar eerst staat Serial.begin en iets verderop Serial1.begin, zie vetgedrukt:

void setup()
{
Serial.begin( 115200); // Stel de seriele monitor in op 115200 baud.
while( !Serial); // Wacht totdat de seriele monitor geopend is (Leonardo).
Serial.println(F( "==================================================="));
Serial.println( "De sketch \"P1 poort tester\" loopt");
Serial.println(F( "==================================================="));

Serial1.begin( 115200); // Voor de P1 poort, alleen RX wordt gebruikt

// Maak pin 13 hoog, die is misschien verbonden met het RTS signaal.
// Bijvoorbeeld als iemand de "P1 poort vertrager" met pin 13 heeft gebruikt.
pinMode( 13, OUTPUT);
digitalWrite( 13, HIGH);
}

VorigeVolgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten