- fchao-Sinus-Wechselrichter AliExpress         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 36

Thema: Oszilloskop erster Versuch, kleine Probleme

  1. #21
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    Anzeige

    Praxistest und DIY Projekte
    8Mhz geteilt durch 100, er zählt von 0 bis 99 löst dann zeitgleich mit 99 den interrupt aus und erst im nächsten timerschritt setzt er wieder auf 0, hab mich auch erst vom echten oszilloskop überzeugen lassen ... im moment zu mindest habe ich ja ADC prescaler 8 * 13 ADC clock rechentakte zeit zum dividieren, ein prescaler unter 8 gibt keine berechenbaren ffrequenzen mehr, deine idee mit (ADC>>4) ist genial ... warum ist mr das nciht eingefallen XD ... es könnt wirklich sein dass bei PS 4 oder gar PS 2 die 26 bzw, 52 rechenzyklen nicht ganz ausreichen, ich redduzier mal die ISR und verfrachte das senden in die UART ISR

    achhhhssoooooooooooo jetzt hab ich das mit dem adlar erst richtig gefressen, stimmt so spar ich mir die division!!! danke besserwessi ^^

  2. #22
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Ok, und ich habe deine rumrechnerei verstanden. Du machst es aber auch umständlich
    Es würde mich schwer wundern wenn GCC diese Optimierung nicht von alleine hinbekommt, immerhin hat er es ja nur mit unsinged Werten zu tun, denen man beim Shiften ja nicht weht tut.

    mfG
    Markus

  3. #23
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    ja mei hüpertärminel und excel zwingen mich zu optimierungen
    Code:
    ISR(SIG_ADC)
    {
    	*pos = ADCH;
    	if (++pos > end) {
    		ADCSRA &= ~((1<<ADEN) | (1<<ADIE));
    		pos = adcval;
    		UCSRB |= (1<<UDRIE);
    	}
    }
    
    ISR(SIG_UART_RECV)
    {
    
    }
    
    ISR(SIG_UART_TRANS)
    {
    
    }
    
    ISR(SIG_UART_DATA)
    {
    	UDR = (*pos)/4+'!';
    	while (!(UCSRA & (1<<UDRE)));
    	UDR = '\r';
    	pos++;
    	if (pos > end) UCSRB &= ~(1<<UDRIE);
    }
    messreihen haben ergeben dass ich DENNOCH nicht unter ADC prescaler 8 gehen kann, da kommt nur schrott raus .... die schwebung hängt wirklich nur mit der frequenz zusammen, wenn ich die impulsfrequenz nur ein wenig verschiebe, klärt sich die schwebung zu einer gleichmäßigen schwingung, die um +/- 2 vom zielwert herumschwingt

    da es im moent nur provisorisch ist und die zeit unkritisch habe ich die ascii anpassung in die UART ISR verlegt

    also wie ich mit dem prescaler noch vernünftig auf 2 runterkommen soll ist mir absolut unklar, liegt vermutlich an den 16Mhz dass ich nicht tiefer als 8 komme, bei 4 komme ich auf umgerechnet eine frequenz von 1,8kHz also 0.8kHz zu viel die abtastung wird also nur um etwa 10% schneller statt sich zu verdoppeln

  4. #24
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Das Verhältnis zwischen Rechenzeit und Wandlungszeit bleibt bei unterschiedlichen Taktfrequenzen immer gleich!

    Das was du beschreibst deutet darauf hin, dass die Eingangsimpedanz zu hoch ist.
    Der ADC ist laut Datenblatt darauf ausgelegt, bei Normfrequenz mit einer Eingangsimpedanz von maximal 10kOhm (Datasheet, Abschnitt ADC: "Analog Input Circuitry")
    Wenn du den ADC mit einer höheren Frequenz betreibst, muss der interne Kondesator schneller aufgeladen werden => deine Stromquelle darf keinen so hohen Widerstand bieten.
    Wenn sie das dennoch tut, kann es sein, dass du Schrott misst.

    mfG
    Markus

    PS: Hoffentlich habe ich dich richtig verstanden

  5. #25
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Wenn es schneller sein soll könnte man auf den Interrupt verzichten und die Daten im Hauptprogram in den Speicher kopieren. Viel Zeit wird schon für Anfang und Ende der ISR zum Retten der Register verbraucht.
    Man hat aber immer noch sie Probleme mit dem AD-wandler, der nicht für so hohen Takt ausgelegt ist. Auch eine Niederohmige Qualle hilft da nicht unbedingt viel.

  6. #26
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Klar wird der ADC ungenauer bei steigender Frequenz. Aber nachdem was ich bisher so zwischen den Zeilen im Forum und im Datenblatt gelesen habe, ist die Impedanz der "Qualle" eben bei steigender Frequenz durchaus von Bedeutung.

    mfG
    Markus

  7. #27
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    naja ich sage es mal so, wenn ich mti prescaler 8 messe, bekomme ich in 1mS ~153 werte, wenn ich mit ps 4 ODER 2 rechne werden es nicht wie zu erwarten wäre ~306 sondern nur rund 185 werte, der wandler ist schlicht zu langsam bei 16Mhz takt ... die daten für meinen tiefpass haste ja, rechne doch mal die Eingangsimpedanz aus, 100Ohm 330nF und 3,6kOhm und 10nF, die ergebnisse sind immer gleich, bei ps2 und 4 rund 185 werte pro impulse == 1mS ... das würde aber schon fast an die im datenblatt genannten 200kHz rankommen obwohl ich aus dem datenblatt nicht wirklich entnehmen kann worauf diese 200kHz sich beziehen .... die schwebung zu eliminieren wird wohl fast unmöglich sein, es sei denn ich schaffe eine passene kombination aus auflösung und samplezahl um mein signal zu erzeugen wo die, naja ich nenns mal "oberschwingung" gleichmäßig ist ... mhhh ndas hab ich ja noch garnicht probiert ^^

  8. #28
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Die 200 kHz im Datenblatt beziehen sich auf den AD Takt. Also Quarztakt / Prescaler. Das gibt dann eine maximale Samplingrate von 200 kHz / 13 = 15,4 Khz. Diese einschränkung ist aber nur für die volle 10 Bit Genauigkeit. Sonst sind bis 1 MHz AD takt vorgesehen, also Prescaler 16 bei 16 Mhz Takt.

    Mit dem Interrrupt geht das einfach nicht schnell genug die daten auszulesen, der AD wandler würde noch schneller Daten liefern, allerdings ist nicht sicher das die gut sind. Geht dann aber nicht mehr mit ISR in C, sondern nur noch in ASM oder per polling.

  9. #29
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    *grusel* ASM
    das polling bleibt wohl die letzte variante die ich probieren kann, ich schrebis mal um ... hätt mir nie träumen lasen dass interrupts so stark bremsen ... ich dachte immer dass das registersichern in max 4 rechenzyklen erledigt ist, dann noch die kopieraktion aus register in speicheradresse, dann inkrement und vergleichen

  10. #30
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Das Problem ist, dass AVR-GCC wohl immer alle Register sichert, auch wenn die ISR nur eine Hand voll braucht. Das macht >50 Operationen nur für die Katz.

    mfG
    Markus

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

12V Akku bauen