-         

Ergebnis 1 bis 7 von 7

Thema: Frequenzmessung - Flanke erkennen

  1. #1

    Frequenzmessung - Flanke erkennen

    Anzeige

    hallo ich hab folgendes Problem:

    Ich will einen Frequenzzähler in AVR Studio 4 für den ATmega88 programmieren.
    Frequenzbereich 80-400Hz. Sinus-Spannung über Oszi an Pin.


    Ich hab mich die letzten 4 stunden durch sämtliche foren und
    bauanleitungen gegoogelt und hab ein grundlegendes Problem:

    Wie erkenn ich eine high-low Flanke des Signals?

    Der ADC ist programmiert und sollte einen 10bit Wert in die Register
    schreiben (ADH, ADL) wie errechne ich daraus eine Flanke? In allen
    Anleitungen wurde einfach abgefragt, ob am Port X eine 1 anliegt
    (Flanke ??).

    Kann der Contr. hardwareseitig eine Flanke erkennen ?

    Danke für die schnellen und zahlreichen Antworten.

  2. #2
    ??
    Einfach prüfen, ob der zuvor gemessene Wert größer, bzw kleiner ist.

    if(wert[i] < wert[i-1]) //Fallende Flanke (1->0)
    if(wert[i] > wert[i-1]) //Steigende Flanke (0->1)

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    04.04.2005
    Ort
    Hamburg
    Alter
    29
    Beiträge
    826
    Naja, da hast du dann aber auch leicht sofort eine Flanke wenn der Wert nur leicht im high oder low bereich flakert. Du müsstest die aufschreiben wie die Werte in den letzten paar Millisekunden waren und dann vergleichen, damit dass ganze aussagekräftig ist, aber da ist die Frage nach ner internen Möglichkeit sehr gut

    Ich hätte auch gerne ne Antwort auf deine Frage . . .
    www.subms.de
    Aktuell: Flaschcraft Funkboard - Informationssammlung

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Warum verwendet ihr nicht den Analog-Comparator, der kann auch gleich einen Interrupt auslösen bei entsprechender Flanke.

    Hubert

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    oder nen OP-Verstärker davor, der dann das kleine Signal auf annähernd
    Rechteck verstärkt
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    50
    Beiträge
    1.195
    Über RC Netzwerk an INT0 oder INT1 Pin und auf Flanke triggern lassen. Steht im Datenblatt des Mega88 beschrieben.

  7. #7
    danke erstmal für eure ideen,

    hab mich jetzt mal an das prog. gemacht. warscheinlich ist es etwas primitv oder umständlich....ist ja auch mein erstes \/

    die berechnung hab ich simuliert und die funtzt auch, aber der ADC konvertiert nicht. hab schon alles mögliche bei der initalisierung
    ausprobiert: Single Conversion, Free Running...
    es wird einfach kein Wert in die ADCL und ADCH register geschrieben,

    Das Signal kommt wie gesagt aus nem generator und liegt definitv am Port an.

    hier die Initialisierung des ADCs:

    Code:
     void initadc (void)
    {
    	//Powersave Disable
    	PRR |= (0<<PRADC);
    	
    	// ADC aktivieren
    	ADCSRA |= (1<<ADEN);
    
    	// Prescaler auf /128
    	ADCSRA |= (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
    
    	// Referenzspannung auf interne 1,1V
    	ADMUX |= (1<<REFS1) | (1<<REFS0);
    
    	// Input auf PC4 / ADC4
    	ADMUX |= (0<<MUX3) | (1<<MUX2) | (0<<MUX1) | (0<<MUX0);
    
    	// Ergebnis rechtsverschoben 
    	ADMUX |=(0<<ADLAR);
    
    	// B-Register initialisieren
    	ADCSRB = 0x00;
    und hier der Start der Konvertierung im Single Conversion Mode:

    Code:
     
    			ADCSRA |= (1<<ADSC);			// Umwandlung starten
    			//while (ADCSRA & (1<<ADSC));		// warten bis umwandlung fertig

Berechtigungen

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