-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: CMPS03 PWM über Port INT0 auslesen (erledigt)

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380

    CMPS03 PWM über Port INT0 auslesen (erledigt)

    Anzeige

    mir schwirren sehr gegensätzlicher ansätze zum auswerten im kopf ... bitte hilf mir mal wer weiter, ich will auslesen ob der pegel an Port INT0 aka PD2 auf high steht ... wie muss ich die bedingung formulieren ... in PORTD schreiben iss ja recht einfach ... aber immer wenn ich einen vergleich mache, kommt da nur mist raus

  2. #2
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    du stellst den pin auf eingang:
    DDRD |= 0x02;
    falls du die internen pullup-widerstände verwenden willst, schreibst du das ins ausgaberegister:
    PORTD |= 0x02;
    um nun den status einzulesen, machst du:
    if(PIND & 0x02){anweisung();}

    dabei ist PIND das register in dem die aktuellen pinzustände stehen, es wrd durhc das "&0x02" auf das zweite bit maskeirt. wenn jetzt der ert noch größer als null ist, ist die bedingung wahr.
    kleinschreibung ist cool!

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380
    lol ... dann muss ich was beim aufbau falsch gemacht haben -.- genau das hab ich auch ARGH ... danke jedenfalls

  4. #4
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    viel glück...
    kleinschreibung ist cool!

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380
    Code:
    unsigned char phigh;
    
    void StartExtInt(void)
    {
    	PORTD |= PD2;	
    //	DDRD |= PD2;	// CON2 (RED_LED) auf Input => ext. Int 0
    	MCUCR |= ((1 << ISC00) | (1 << ISC01));	// High level interrupt
    	GICR |= (1 << INT0);	// interrupt aktiviren
    }
    
    void StopExtInt(void)
    {
    	GICR &= ~(1 << INT0);	// Interrupt löschen
    	MCUCR &= ~((1 << ISC00) | (1 << ISC01));	// low level set
    }
    
    SIGNAL (SIG_INTERRUPT0)
    {
    	StopExtInt();
    	while(!(PIND & (1 << PD2)));
    	mybase = 0;
    	phigh = 1;
    }
    
    
    
    int main(void)
    {
    	unsigned int mem;
    	phigh = 0;
    	Init();			// initialise the processor
    	SerWrite("Start", 5);
    	StartExtInt();
    	SerWrite("Run", 3);
    	StatusLED(GREEN);
    	//OFF,GREEN,YELLOW,RED
    	sei();
    	while(1) {
    		if((phigh == 1) && !(PIND & (1 << PD2))) {
    			mem = mybase;
    			SerWrite((unsigned char*)&mem, sizeof(mem));
    			SerWrite("\n", 1);
    			StartExtInt();
    			phigh = 0;
    		}
    	}
    	return 0;
    }
    also WENN ich den pin manuell auf high lege geht es und er misst mir auch ne zeit aus ... wenn cih das cmps03 anschliesse pasiert nix mehr ... aber ich hatte ihn schonmal so weit das er permanent den interrupt ausgelöst hat Q_Q was mach ich falsch ?!

    also das signal liegt am con2 an also int0 und damit pd2 .... aber es passiert nix ....

  6. #6
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    problem könnte sein dass du einen high level interrupt willst, aber gleichzeitig die pullups aktivierst. versuche, einen flankeninterrupt zu nutzen.
    kleinschreibung ist cool!

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380
    ok batterien gewechselt und siehe da es geht ! hab nen bc548 dazwischen "gefreiverdrahet" und funktioniert super! ausrichten, kalibrieren, programm starten und er orientiert sich sehr gut ^^ er eiert ein wenig um die max. 1° bei mir aber das recht rhytmisch, sodass ich es mit ein wenig mitteln der werte ausgleichen kann.

  8. #8
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    sehr gut!....was wird denn ausgelesen? was generiert den interrupt?
    kleinschreibung ist cool!

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380
    also ich bekomme werte zwischen 70 und 2720, wenn ich den kompass kalibriere dann ist es recht genau, auch wenn die südrichtung manchmal nicht GANZ hinhaut .... ich werd ne doppelte kalibrierung machen müssen, einmal sensor, dann die himmelsrichtungen einspeichern.
    zum fahren funktioniert es super, ich messe odometrie immer wenn ich einen impuls gemessen habe und sammel die werte am PC, ist ziemlich genau geworden, eiert ein wenig, aber bei den impulsabständen gleicht sich das gut aus

  10. #10
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    sehr gut. wie wären die werte denn ideal?
    kleinschreibung ist cool!

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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