-
        

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

Thema: Drehzahlmessung mit Pic16f84A in C für Schaltblitz

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    13.11.2007
    Alter
    24
    Beiträge
    88

    Drehzahlmessung mit Pic16f84A in C für Schaltblitz

    Anzeige

    Hallo
    Ich weiß nicht ob das hier der richtige Bereich ist für meinen Post, habe aber nichts entsprechenderes gefunden.

    Also mein Problem ist, ich möchte einen Schaltblitz für meine Aprilia bauen.

    Dafür muss ich an einem Pin die Frequenz von der Lichtmaschine für eine gewisse Zeit abgreifen, mit einem Wert vergleichen und jenach Ergebnis einen anderen Pin auf High setzen.

    Nun weiß ich jedoch nicht wie ich eine Frequenz mit dem PIC16F84A einlesen kann. Kann mir vielleicht jemand Tipps oder nochbesser Code fetzen geben damit ich weiter komme?

    Freue mich auf Antwort
    Gruß Marius

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.11.2007
    Alter
    33
    Beiträge
    140
    Servus,

    also ich habe keine Ahnung was ein Schaltblitz genau machen bzw. bringen soll. Aber ich habe einen ganz guten Link für dich: http://www.sprut.de/electronic/pic/p...quenz/freq.htm

    Schau dir dieses Beispiel für die Frequenzmessung einfach mal an.

    Gruß

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    13.11.2007
    Alter
    24
    Beiträge
    88
    Hallo
    Jau habe ich auch schon gesehen nur leider alles in Assembler.
    Habe mich jetzt mal daran gesetzt und einen Code geschrieben.
    Ich denke der müsste theoretisch funktionieren.

    Code:
    #include <C:\cc5\16F84a.h>	
    #pragma config |= 0b.1111.1111.0010	// Prozessor-Typ definieren
    
    
    void warten(void)			//Timer auf eine ms einstellen
    {
    OPTION = 2;
    TMR0 = 131;
    while (TMR0);
    }
    
    
    void main(void)				// Start des Hauptprogramms
    {
    TRISB = 0b.0000.0001;			//Pin 0 ist Eingang , Pin 1 bis 7 ist Ausgang
    PORTB = 0b.0000.0000;		
    
    char puls;			//Frequenz Impulse Variable setzen
    char lauf;			// Durchläufe festhalten
    
    bit Rein @ PORTB.0;   //Namen zuweisen
    bit Raus @ PORTB.1;
    
    Sprungmarke:
    
    //Abfrage an Port B
    
    
    lauf=250;
    
    while (lauf)
            {
        	if (Rein) ;
    	    	{
    	    	puls++ ;
    	    	}
    	
        	warten();
        	lauf-- ;
            }
    	
    	puls=puls*4;
    	
    	if (puls>150)
    		{
    		Raus=1 ;
    		}
    
    puls=0
    goto Sprungmarke;
    		
    }

    @Enrock
    ein Schaltblitz ist ein Gerät, dass bei Fahrzeugen ein Warsignal ausgibt, sobald eine vorher bestimmte maximal Drehzahl erreicht ist.

    Vielleicht kann sich den Code ja mal jemand anschauen.
    Noch eins: Irgendwie will mein Compiler (CC5X) das nicht compilieren.
    Er meint ich müsse hinter goto eine ; setzten was quatsch is und wenn ich es mache will er es trotzdem nicht compilieren.

    Gruß Marius

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.11.2007
    Alter
    33
    Beiträge
    140
    Servus,

    vor "puls=0" fehlt das ";".
    Ich programmiere die Pics gerade die kleineren nur in Assembler, von daher kann ich dir mit dem Code nur wenig helfen.

    Gruß

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    13.11.2007
    Alter
    24
    Beiträge
    88
    Hallo
    danke aber wieso vor? sicher das das nicht dahinter stehen muss?

    Edit: jau toll jetzt compiliert er wenigstens jetzt muss nurnoch jemand den code überprüfen dann kann den brennen wenn der so funktionieren müsste.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.11.2007
    Alter
    33
    Beiträge
    140
    Hallo,

    jap ich meinte danach bzw. vor goto.
    Den Pic 16F kannst du auch öfter brennen Mich würde noch die Schaltung interessieren. Die Lichtmaschine wird ja wohl kaum 5 Volt Pegel generieren, oder?

    Gruß

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    13.11.2007
    Alter
    24
    Beiträge
    88
    oh F**k stimmt jetzt wo du es sagst die gibt 12 V.
    ja wie mache is das dann? Ich würde sagen mit Widerständen oder?
    Oder wie kann man das noch machen ich werde mal einen Schaltplan erstellen so wie ich mir das vorstelle.

    Edit: so habe jetzt mal einen Schaltplan gemacht.
    Plan ist im Anhang


    Edit2: So habe jetzt alle nötiegen Teile bestellt. Wenn sie ankommen werde ich mich dran machen und den Gedöns aufbauen.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken schaltblitz.png  

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.11.2007
    Alter
    33
    Beiträge
    140
    Guten Morgen,

    also die Spannung der Frequenz würde ich mit einem Spannungsteiler reduzieren.
    Von welcher Frequenz sprechen wir denn hier überhaupt? Weißt du das?

    Ich würde zusätzlich für den Reset MCLR einen Taster einbauen (entprellt), dass du den µC auch gewollt zurück setzen kannst, ohne ihn von der Spannung zu trennen. Zumindest gehört noch eine Kapazität vor den MCLR um ein Delay zu erzeugen.
    Dann ergeben zwei LEDs an Port RB1 für mich keinen Sinn(doppelte Anzeige?). Ich dachte du wolltest dir da eine richtige Anzeige bauen.
    Also quasi so:
    1. LED -> Schaltpunkt zu früh/Drehzahl zu niedrig
    2. LED -> Schaltpunkt zu richtig/Drehzahl passt
    3. LED -> Schaltpunkt zu spät/Drehzahl zu hoch

    Also das man auch Zeit hat sich beispielsweise auf den Schaltpunkt vorzubereiten.
    Oder soll das Gerät zu eine bestimmte Drehzahl anzeigen?!

    Gruß

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    13.11.2007
    Alter
    24
    Beiträge
    88
    Ja stimmt ich werde jetzt 3 LEDS verbauen.
    nun habe ich ein Problem ich will die Freuqenz mit einer Select case anweisung auswerten. klappt auch soweit nur ich kann keine bereiche von zahlen also zum beispiel 150 bis 200 sondern nur eine zahl also 150 eintragen. wie muss ich das schreiben?
    habe es mit mit größer als und mit 150 to 200 versucht aber das geht beides nicht


    die erste led geht jetzt bei 8000 an, die zweite bei 9000 und die dritte bei 10000. code kommt noch aber erst wenn er compiliert werden kann.
    gruß marius

    Edit: So der neue Schaltplan und der neue Code sind fertig:


    Code:
    
    #include <C:\cc5\16F84a.h>	
    #pragma config |= 0b.1111.1111.0010	// Prozessor-Typ definieren
    
    
    void warten(void)			//Timer auf eine ms einstellen
    {
    OPTION = 2;
    TMR0 = 131;
    while (TMR0);
    }
    
    
    void main(void)				// Start des Hauptprogramms
    {
    TRISB = 0b.0000.0001;			//Pin 0 ist Eingang , Pin 1 bis 7 ist Ausgang
    PORTB = 0b.0000.0000;		
    
    char puls;			//Frequenz Impulse Variable setzen
    char lauf;			// Durchläufe festhalten
    
    bit rein @ PORTB.0;   //Pin für Frequenz Input
    bit unter @ PORTB.1;    //Pin für erste LED
    bit fast @ PORTB.2;     //Pin für zweite LED 
    bit drauf @ PORTB.3;    //Pin für die maximale Drehzahl
    
    Sprungmarke:
    
    //Abfrage an Port B
    
    
    lauf=250;
    
    while (lauf)
            {
        	if (rein) ;
    	    	{
    	    	puls++ ;
    	    	}
    	
        	warten();
        	lauf-- ;
            }
    	
    	puls=puls*4;
    
        if (puls>133) ;
            {
            unter=1;
            }
    
        if (puls>150) ;
            {
            fast=1;
            }
    
        if (puls>167) ;
            {
            drauf=1;
            }
    
    
    puls=0;
    goto Sprungmarke;
    		
    }
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken schaltblitz_644.png  

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    13.11.2007
    Alter
    24
    Beiträge
    88
    Huhu endlich mal wieder ein erfolgserlebnis.
    habe mir heute eine testplatine gebaut, die auch tadellos (wenn auch sehr langsam da ohne quarz) funktioniert. Habe erstmal ein test prog geschrieben um alle ausgänge zu testen. so jetzt kann es wieder mit voller begeisterung weitergehen.


    hier ein video vom test:

    http://www.youtube.com/watch?v=K7J3RqGHLuQ

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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