Skocz do zawartości

[Solved] ESP32 - różne wersje boardu dla IDE, różne działanie programu


ethanak

Pomocna odpowiedź

Hej.

Mam taki durny problemik z ESP32. Na wersji 1.0.4 kompiluje się, działa. Na wersji 2.0 kompiluje się, i nie działa...

Taki minimalny kompletny kawałek kodu:

#include <driver/adc.h>
#include <WiFi.h>

int dataPin = 36;
int clockPin = 39;

#define ADC_TRESHOLD 800
#define BIT_READ_TIMEOUT 100UL
#define PACKET_READ_TIMEOUT 250UL
#define PACKET_BITS       24

int getBit() {
    int data;

    uint32_t readTimeout = millis(); 
    while (analogRead(clockPin) > ADC_TRESHOLD) {
      if (millis() - readTimeout > BIT_READ_TIMEOUT)
        return -1;
    }
    while (analogRead(clockPin) < ADC_TRESHOLD) {
      if (millis() - readTimeout > BIT_READ_TIMEOUT)
        return -1;
    }
    data = (analogRead(dataPin) > ADC_TRESHOLD)?1:0;
    return data;
}

// read one full packet
long getPacket() 
{
    uint32_t packet = 0;
    uint32_t readTimeout = millis();

    int bitIndex = 0;
    while (bitIndex < PACKET_BITS) {
      int bit = getBit();
      if (bit < 0 ) {
        if (millis() - readTimeout > PACKET_READ_TIMEOUT) {
          return -1;
        }
        bitIndex = 0;
        packet = 0;
        continue;
      }
      packet |= (bit & 1)<<bitIndex;      
      bitIndex++;
    }
    return packet;
}

void setup()
{
    Serial.begin(115200);
    WiFi.mode(WIFI_MODE_NULL);
    analogReadResolution(11);
    analogSetAttenuation(ADC_6db);
}

void loop()
{
    long packet;
    packet = getPacket();
    if (packet >= 0) {
        printf("%08x\n",(uint32_t)packet);
        delay(200);
    }
}

Program sczytuje dane z suwmiarki, jak widać proste to jak rogalik. Skompilowany na 1.0.4 daje prawidłowe wyniki. Skompilowany na 2.0 przekształca się w całkiem niezły generator losowy... a co ciekawe - najstarszy (23) bit jest zawsze czytany prawidłowo.

Ma ktoś pomysł co tu jest nie tak?

Wyniki pomiarów sprawdzałem, są 0 (dla zera) i ok. 1500 (dla jedynki).

Aha, dlaczego 2.0 a nie 2.0.2 - bo na 2.0.2 nie działa prawidłowo dźwięk...

Edytowano przez ethanak
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

No, zrobione. Bardzo ładnie działa.

int getBit() {
    int data;
    uint32_t readTimeout = millis();
    while (adc1_get_raw(ADC1_CHANNEL_3) > 200) {
      if (millis() - readTimeout > BIT_READ_TIMEOUT)
        return -1;
    }
    while (adc1_get_raw(ADC1_CHANNEL_3) < 200) {
      if (millis() - readTimeout > BIT_READ_TIMEOUT)
        return -1;
    }
    data =  (adc1_get_raw(ADC1_CHANNEL_0) > 200) ?1:0;
    return data;
}
void setup()
{
    Serial.begin(115200);
    WiFi.mode(WIFI_MODE_NULL);
    adc1_config_width(ADC_WIDTH_BIT_9);
    adc1_config_channel_atten(ADC1_CHANNEL_0,ADC_ATTEN_DB_6);
    adc1_config_channel_atten(ADC1_CHANNEL_3,ADC_ATTEN_DB_6);
    
}

Nie wiem co on tam wyczynia w analogRead, ale patrząc pobieżnie na kod w esp32-hal-adc.c to coś dużo za dużo 🙂

 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.