Seite 6 von 7 ErsteErste 1234567 LetzteLetzte
Ergebnis 76 bis 90 von 97
Like Tree1Likes

Thema: für xorg1990

  1. #76
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.556

    AW: für xorg1990

    we leave it at its default value, 255
    ok
    Zitat Zitat von xorg1990 Beitrag anzeigen
    Da man die PLL nur für eine Sache verwenden kann
    wo steht das?


    Zitat Zitat von xorg1990 Beitrag anzeigen
    Da kommt jetzt
    mhhh, seh ich mir mal später an

  2. #77
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.556

    AW: für xorg1990

    Zitat Zitat von xorg1990 Beitrag anzeigen
    Die SPI Geschwindigkeit sollte nicht unter 500 000 Hz gehen, dann tritt das Problem wider auf.
    das wären 2µs - glaub ich nie, dass du die hinbekommst nach allem was wir bisher mit dem timer auf dem esp gelesen und getestet haben

    Zitat Zitat von xorg1990 Beitrag anzeigen
    Code:
      timer1_write((clockCyclesPerMicrosecond() / 16) * MICRODELAY);
    warum eigentlich durch 16?

    Zitat Zitat von xorg1990 Beitrag anzeigen
    Und den transfer sollte man nicht in einer SoftwareTimer ISR machen, stattdessen Timer1 oder Timer0, habe Timer 1 genommen:
    ist timer1 denn kein sw-timer?
    Zitat Zitat von xorg1990 Beitrag anzeigen
    Der code für Timer 0 und Timer1 steht hier.
    https://github.com/esp8266/Arduino/b...sp8266_timer.c
    scheint so
    übrigens ist timer1_isr_init:
    Code:
    void ICACHE_RAM_ATTR timer1_isr_init(){
        ETS_FRC_TIMER1_INTR_ATTACH(timer1_isr_handler, NULL);
    }
    und in "ets_sys.h" ist ETS_FRC_TIMER1_INTR_ATTACH definiert zu
    Code:
    #define ETS_FRC_TIMER1_NMI_INTR_ATTACH(func) \
    	NmiTimSetFunc(func)
    dazu später mehr

    Zitat Zitat von xorg1990 Beitrag anzeigen
    Da kommt jetzt:
    (.irom0.text+0xc): undefined reference to `NmiTimSetFunc(void (*)())'
    /tmp/arduino_build_154877/sketch/LIchtSprechen3.0b.ino.cpp.o: In function `hw_timer_init':
    /tmp/arduino_build_154877/sketch/data/hw_timer.c:74: undefined reference to `NmiTimSetFunc(void (*)())'
    collect2: error: ld returned 1 exit status
    NmiTimSetFunc ist in libmain.a enthalten
    Code:
    xtensa-lx106-elf-objdump -t libmain.a | grep NmiTimSetFunc
    00000078 g     F .text  00000020 NmiTimSetFunc
    damit sollte das gehen.
    jetzt zurück zu timer1.
    dort wird timer1_isr_handler als isr übergeben, die ist definiert als
    Code:
    void ICACHE_RAM_ATTR timer1_isr_handler(void *para)
    der linker findet bei dir NmiTimSetFunc(void (*)()) nicht, also als cb übergibst du
    Code:
    void ICACHE_RAM_ATTR cb()
    eine funktion ohne parameter
    in meinem sdk ist das in hw_timer.c auch so:
    Code:
    static void  hw_timer_isr_cb(void)
    vermutlich nutzt arduino eine andere sdk version, wo die isr einen void pointer erwartet als parameter
    du musst also vermutlich überall diesen parameter ergänzen
    in dem hw_timer.c von mir dann etwa so:
    Code:
    ...
    static void (* user_hw_timer_cb)(void*) = NULL;
    /******************************************************************************
    * FunctionName : hw_timer_set_func
    * Description  : set the func, when trigger timer is up.
    * Parameters   : void (* user_hw_timer_cb_set)(void):
                            timer callback function,
    * Returns      : NONE
    *******************************************************************************/
    void  hw_timer_set_func(void (* user_hw_timer_cb_set)(void*))
    {
        user_hw_timer_cb = user_hw_timer_cb_set;
    }
    
    static void ICACHE_RAM_ATTR hw_timer_isr_cb(void*)
    ...
    - - - Aktualisiert - - -

    und der esp hat 2 hw timer

    - - - Aktualisiert - - -

    und du hast eine cpp datei, dann musst du die vorwärtsdeklaration noch in
    Code:
    extern "C" {
       
    }
    einschließen

  3. #78
    Avatar von xorg1990
    xorg1990 ist offline König
    registriert
    19-12-2013
    Beiträge
    758

    AW: für xorg1990

    Zitat Zitat von tsseh
    wo steht das?
    Bin der Meinung gelesen zu haben das die PLL nur funktioniert für Timner1 wenn der avr mit 8Mhz intern oder +8Mhz extern Oszillator versorgt wird.
    Im Datenblatt steht davon nix.
    Ist ja egal beenden wir das.


    Zitat Zitat von tsseh
    das wären 2µs - glaub ich nie, dass du die hinbekommst nach allem was wir bisher mit dem timer auf dem esp gelesen und getestet haben
    Wer sagt das man ein SPI Transfer aller 2µs ausführen muss. Die SPI Übertragungsrate ist so hoch, aber senden tue ich ein byte aller 52µs.

    Zitat Zitat von tsseh
    warum eigentlich durch 16?
    Frag mich was besseres.
    ESP8266 microsecond delay with timer - OneTechPulse

    Übrigens funktioniert Timer1 nicht wenn der esp mit 160Mhz getaktet ist. Timer0 meldet sich immer mit einem WDT Reset warum auch immer.

    Die OS _Timer funktionieren mit 160Mhz genau so inakkurat wie mit 80 Mhz. Aber unter 30µs wird es kritisch dann es ist extrem inakkurat.


    Zitat Zitat von tsseh
    und der esp hat 2 hw timer
    Wie kommt der Sinneswandel auf einmal?


    Zitat Zitat von tsseh
    und du hast eine cpp datei, dann musst du die vorwärtsdeklaration noch in
    Habe ich.

  4. #79
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.556

    AW: für xorg1990

    Zitat Zitat von xorg1990 Beitrag anzeigen
    Wer sagt das man ein SPI Transfer aller 2µs ausführen muss. Die SPI Übertragungsrate ist so hoch, aber senden tue ich ein byte aller 52µs.
    ob du zwischendurch auch mal pause hast oder nicht spielt ja keine rolle, du musst aber den 2µs takt überhaupt erzeugt bekommen.



    Zitat Zitat von xorg1990 Beitrag anzeigen
    prescaler 16
    timer1_enable(TIM_DIV16, TIM_EDGE, TIM_LOOP);

    dort steht aber auch, die genauigkeit ist ± 4µs das ist schon das aus für einen 2µs takt

    Zitat Zitat von xorg1990 Beitrag anzeigen
    Die OS _Timer funktionieren mit 160Mhz genau so inakkurat wie mit 80 Mhz. Aber unter 30µs wird es kritisch dann es ist extrem inakkurat.
    die haben im sdk die untere grenze von 100µs ja sicher nicht gewürfelt
    unit: microsecond, the minimum value is 0x64, the maximum value allowed to input is 0xFFFFFFF.
    Zitat Zitat von xorg1990 Beitrag anzeigen
    Wie kommt der Sinneswandel auf einmal?
    https://espressif.com/sites/default/...ference_en.pdf
    Appendix 4 Timer Registers
    Geändert von tsseh (11-07-2017 um 08:30 Uhr)

  5. #80
    Avatar von xorg1990
    xorg1990 ist offline König
    registriert
    19-12-2013
    Beiträge
    758

    AW: für xorg1990

    Zitat Zitat von tsseh
    , du musst aber den 2µs takt überhaupt erzeugt bekommen.
    Das macht doch die SPI Klasse, wie die das macht ist mir Wurst.
    https://github.com/esp8266/Arduino/b...I/SPI.cpp#L196

    Laut Datenblatt geht spi speed bis 80Mhz:
    SPI mode can be implemented via software programming. The clock frequency can reach up to
    a maximum value of 80MHz.

    http://www.esp8266.com/wiki/lib/exe/...et_en_v4.3.pdf

    Zitat Zitat von tsseh
    prescaler 16
    Weiß ich, erklärt aber nicht warum dort durch 16 Teilt.

    Zitat Zitat von tsseh
    unit: microsecond, the minimum value is 0x64, the maximum value allowed to input is 0xFFFFFFF.
    Interessant.

    Zitat Zitat von tsseh
    Appendix 4 Timer Registers
    OK.

    In einem github Projekt stand geschrieben, dass die 320kBit/s wifi Bandbreite nur gehen wenn der esp mit 160Mhz getaktet ist. hast du das Quellen für??
    Bei 80Mhz seien es um die 250kBit/s.

    Das Verzögerungs Problem im WLAN beim senden/empfangen ist auch kein Einzelfall.

    Ich glaube, die Taktfrequenz ist gar nicht der Knackpunkt. Mir kommt es
    eher so vor, als ob das Modul in einem 100ms Raster arbeitet. Wenn du
    viele Netzwerkpakete hintereinander sendest oder empfängst, sind
    dazwischen immer Zeitabstände von ungefähr 100ms. Egal, wie groß die
    Pakete sind.

    https://www.mikrocontroller.net/topic/393721

  6. #81
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.556
    Zitat Zitat von xorg1990 Beitrag anzeigen
    Das macht doch die SPI Klasse, wie die das macht ist mir Wurst.
    sollte es aber nicht

    dann ist das doch keine bit banging implementierung sondern die übertragung macht die hardware, damit sollten die 2µs "eigentlich" kein problem sein

    Zitat Zitat von xorg1990 Beitrag anzeigen
    Weiß ich, erklärt aber nicht warum dort durch 16 Teilt.
    alle 16 cycles zählt der counter 1 weiter
    wenn du wissen willst wieviel cycles er zählen muss um alle x µs einen Int auszulösen musst du cycles pro µs / 16 * x rechnen

    Zitat Zitat von xorg1990 Beitrag anzeigen
    In einem github Projekt stand geschrieben, dass die 320kBit/s wifi Bandbreite nur gehen wenn der esp mit 160Mhz getaktet ist. hast du das Quellen für??
    quellen für was? du meinst die sdk c-files? nee. das ist nur ne lib, da bekommst du nur den compelierten asm-code raus

    Zitat Zitat von xorg1990 Beitrag anzeigen
    Das Verzögerungs Problem im WLAN beim senden/empfangen ist auch kein Einzelfall.
    nochmal. ich hab das getestet und es geht im schnitt grob geschätzt mit ca. 10 ms im mittel für 100 byte hin und wieder zurück, das sollte doch reichen.

    Mir kommt es eher so vor, als ob das Modul in einem 100ms Raster arbeitet.
    dass das in irgendeinem raster arbeitet würde ich auch erwarten, aber keine 100ms, die es auch nicht sein können, weil in meinem test sonst immer mindestens 200ms rauskommen müssten.

    - - - Aktualisiert - - -

    Zitat Zitat von tsseh Beitrag anzeigen
    das ist nur ne lib, da bekommst du nur den compelierten asm-code raus
    hier
    https://github.com/ernacktob/esp8266_wifi_raw/blob/master/disas/callstack#L23
    hat sich mal jemand damit beschäftigt

  7. #82
    Avatar von xorg1990
    xorg1990 ist offline König
    registriert
    19-12-2013
    Beiträge
    758

    AW: für xorg1990

    Zitat Zitat von tsseh
    sollte es aber nicht
    Naja, wie SPi Funktioniert und das es in Hardware basiert und nicht via BitBanging, das habe ich mir schon angehen.

    Zitat Zitat von tsseh
    dann ist das doch keine bit banging
    Habe ich das gesagt. Habe mir doch damals extra die ESP-03 Module geholt.

    Zitat Zitat von tsseh
    quellen für was?
    Das die Wlan Übertagung mit 160Mhz schneller geht als mit 80Mhz.

  8. #83
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.556

    AW: für xorg1990

    Zitat Zitat von xorg1990 Beitrag anzeigen
    Habe ich das gesagt. Habe mir doch damals extra die ESP-03 Module geholt.
    weiss ich nicht mehr, dachte immer du hattest eine sw-lösung

    Zitat Zitat von xorg1990 Beitrag anzeigen
    Das die Wlan Übertagung mit 160Mhz schneller geht als mit 80Mhz.
    dafür würde ich keinen grund sehen, kann sein dass du die schneller mit daten versorgt bekommst, da dein code dann ja doppelt soviel zeit hat um abgearbeitet zu werden und damit mehr zeit übrig bleibt für tcp ip die übertragung selbst sollte davon nicht betroffen sein.

  9. #84
    Avatar von xorg1990
    xorg1990 ist offline König
    registriert
    19-12-2013
    Beiträge
    758

    AW: für xorg1990

    Zitat Zitat von tsseh
    weiss ich nicht mehr, dachte immer du hattest eine sw-lösung
    Nee, hatte doch extra den ESP-03 geholt, da einzige was wir nicht wussten was mit den Flash Speicher passiert wenn man eine SPI Übertagung zum avr startet. Das Ergebnis ist nix.


    Zitat Zitat von tsseh
    dafür würde ich keinen grund sehen,
    Ích ebenfalls nicht, das einzeige was ich gestern herausgefunden habe ist, das das Übertragungs delay bei 80Mhz größer ist als als bei 160Mhz.

    2Dinge kapiere ich dennoch nicht.
    Ding 1:
    Ich höre am AVR, also an der PWM Ausgabe was der ESP macht, z.b Wenn ich das WLAN verbinde oder wen ich die Webseite aus dem Flash Spiecher lade. Da hört man dann so digitales gedöns. Nicht weiter störend aber warum eigentlich?

    Ding2:
    Die SPI Übertragung ist ja Synchroton sprich wenn ich ein byte sende Empfang ich im Gegenzug eins. Das betrift auch die Zeiten, wenn ich mit 1Mhz sende kommt auch ein byte alle 1Mhz.

    Da passt bei mir aber nicht. Wenn ich Daten vom AVR empfangen möchte, dann muss ich mit 1Mhz arbeiten. Möchte ich Daten zum AVR senden dann nur 1/4 weniger oder mehr. Habe eine SPI Frequenz Umschaltung aufgebaut aber sinn und zweck ist das auch nicht.


    Aktuell klinkt die Ausgabe gut, im Browser jittert es ab und zu mal, habe den esp aber auch zu 100% ausgereizt:
    kannst du dir hier downloaden und anhören:
    https://1drv.ms/u/s!AlZ7IuvCJ0zWkleNpdc7lOZq2jti

    Die PWM Aufnahme Pfeift etwas, liegt an der Aufnahme, normal hört man das nicht.

  10. #85
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.556

    AW: für xorg1990

    war ne weile nicht da

    Zitat Zitat von xorg1990 Beitrag anzeigen
    da einzige was wir nicht wussten was mit den Flash Speicher passiert wenn man eine SPI Übertagung zum avr startet. Das Ergebnis ist nix.
    doch, das wussten wir/ich der esp hat 2 spi schnittstellen, an einem hängt der flash, den anderen nutzt du

    Zitat Zitat von xorg1990 Beitrag anzeigen
    Da passt bei mir aber nicht. Wenn ich Daten vom AVR empfangen möchte, dann muss ich mit 1Mhz arbeiten. Möchte ich Daten zum AVR senden dann nur 1/4 weniger oder mehr.
    klingt komisch

  11. #86
    Avatar von xorg1990
    xorg1990 ist offline König
    registriert
    19-12-2013
    Beiträge
    758

    AW: für xorg1990

    Zitat Zitat von tsseh
    war ne weile nicht da
    Mach nüscht, bin auch oft auf Montage oder manchmal auch im Urlaub

    Zitat Zitat von tsseh
    doch, das wussten wir/ich der esp hat 2 spi schnittstellen, an einem hängt der flash, den anderen nutzt du
    Ok.

    Zitat Zitat von tsseh
    klingt komisch
    Das verhalten ist nur wenn man des ESP mit 160Mhz taktet.

    Aktuell bin ich mit der Übertragung zu frieden mal davon abgesehen, dass das Gegensprechen nicht funktioniert. Die Qualität der Ausgabe ist aber ok, sowohl die PWM als auch das was im Browser ankommt.

    Eine Sache habe ich doch noch, ich brauche eine Umschaltung der Referenzspannung beim AVR ADC.

    Kann ich in das ADMUX Register schreiben wärend der ADC Im FreeRunning mode läuft?
    Müsste von VCC Refs zu 1.1V Intern Refs umschalten.

  12. #87
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.556
    Zitat Zitat von xorg1990 Beitrag anzeigen
    Eine Sache habe ich doch noch, ich brauche eine Umschaltung der Referenzspannung beim AVR ADC.
    warum das denn?

    Zitat Zitat von xorg1990 Beitrag anzeigen
    Kann ich in das ADMUX Register schreiben wärend der ADC Im FreeRunning mode läuft?
    naja, du wirst dann den aktuell gemessenen wert (der nächste der fertig wird) nicht gebrauchen können.

    - - - Aktualisiert - - -

    ADC Voltage Reference
    The voltage reference for the ADC (VREF) indicates the conversion range for the ADC. Single ended channels that
    exceed VREF will result in codes close to 0x3FF. VREF can be selected as either VCC, or internal 1.1V / 2.56V voltage
    reference, or external AREF pin. The first ADC conversion result after switching voltage reference source may
    be inaccurate, and the user is advised to discard this result.

  13. #88
    Avatar von xorg1990
    xorg1990 ist offline König
    registriert
    19-12-2013
    Beiträge
    758

    AW: für xorg1990

    Zitat Zitat von tsseh
    warum das denn?
    Naja,wenn die Foto-Diode nicht mehr genug Leistung bringt (Z.B wenn es neblig wird), kann man die Referenzspannung reduzieren und das empfangen Signal sollte wider lauter werden.

    Zitat Zitat von tsseh
    naja, du wirst dann den aktuell gemessenen wert (der nächste der fertig wird) nicht gebrauchen können.
    Denke das kann man verschmerzen.

  14. #89
    Avatar von xorg1990
    xorg1990 ist offline König
    registriert
    19-12-2013
    Beiträge
    758

    AW: für xorg1990

    Hi tsseh, das umschalten der Referenzspannung klappt doch nicht so ohne weiteres.
    Ändert man nur das ADMUX Register, bleibt der ADC Stehen.

    Habe es so gelöst:
    Code:
    void toggleVref(void) {
      cli();
       ADCSRA = (0 << ADEN);
      if (isLowRefVoltage == false) {
        ADMUX =   3 | //channel 3
                  (1 << ADLAR) |     // left shift result
                  (0 << REFS2) |     // Sets ref. voltage to internal 1.1V, bit 1
                  (1 << REFS1) |     // Sets ref. voltage to internal 1.1V, bit 2
                  (0 << REFS0) ;     // Sets ref. voltage to internal 1.1V, bit 1
        isLowRefVoltage = true;
      } else {
        ADMUX =   3 | //channel 3
                  (1 << ADLAR) |     // left shift result
                  (0 << REFS1) |     // Sets ref. voltage to internal 3.3V, bit 1
                  (0 << REFS0) ;     // Sets ref. voltage to internal 3.3V, bit 0
    
        isLowRefVoltage = false;
      }
      ADCSRA =
        (1 << ADEN)  |     // Enable ADC at 38461 Hz Samplerate
        (1 << ADSC)    | // start conversion
        (1 << ADATE)   | // free running
        (1 << ADPS2) |     // set prescaler to 16, bit 2
        (0 << ADPS1) |     // set prescaler to 16, bit 1
        (0 << ADPS0) |     // set prescaler to 16, bit 0
        (1 << ADIE); //enabel adc isr
        sei();
    }
    NB:
    Die PCINT Interrupts funktionieren im AttinyCore auch nicht wirklich, da musste ich diese Klasse nehmen.
    https://github.com/NicoHood/PinChangeInterrupt

  15. #90
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.556

    AW: für xorg1990

    Zitat Zitat von xorg1990 Beitrag anzeigen
    Die PCINT Interrupts funktionieren im AttinyCore auch nicht wirklich, da musste ich diese Klasse nehmen.
    https://github.com/NicoHood/PinChangeInterrupt
    dann würde die klasse auch nicht funktionieren. du meinst die funktionieren nicht wie normale INT0-n? ja! der einzige externe interrupt beim tiny, INT0, liegt auf PB2.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •