- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 20 von 20

Thema: Terminalprogramm, Datenübertragung und

  1. #11
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    Anzeige

    Powerstation Test
    Zitat Zitat von BlackDevil
    Code ist immer interessant ...
    ... dabei wollen wir mal festhalten, dass ich im Prinzip immer noch Anfänger bin - ich beschäftige mich grad ein knappes Jahr mit µC´s und mit der Sprache C erst seit letztem Dezember. Beschäftigen heißt ja auch nicht "können".

    Zitat Zitat von BlackDevil
    ... obgleich deine Variablen etwas schwierig zu entziffern sind (teilweise) ...
    Du loos, ih wohn im beirischn Schwobn, des isch bei iis des Allgei - obwol i a Auslenda bi. Do wiatz scho a bizzle a drAnpassung liaga. (Kann ich bei Bedarf in die eine oder andere europäische Sprache übersetzen).

    Zuerst muss man mal einen Timer initialisieren. Ich mach das mit dem Timer2, das ist der Timer mit der höchsten Interrupt-Priorität - also der, der als erster bedient wird! Der Timer2 wird bei mir wie folgt initialisiert - denk dran, ich arbeite mit dem mega168 und einem 20MHz-Takt, bei anderen Takten und Zeitschnippsel muss entsprechend angepasst werden. Hier kann ich übrigens nix für die Variablen - die sind im doc vorgeschrieben.
    Code:
    /* ============================================================================== */
    /* ===  Initialisierung fuer Timer2 mega168 ===================================== */
    void TC2TMR_init(void)                  // Init Tmr/Cntr 2, 8-Bit auf 20 kHz = 50 µs
    {	     
        TCCR2A |= (1<<WGM21);               // Timer im CTC-Mode, Top=OCR2A   doc S 157
        TCCR2B |= (1<<CS21);		// Prescaler 1/8 / Clock <- CPU	  doc S 158
        OCR2A = 124;                        // Preset 125 für 50µs bei 20Mhz  
        TIMSK2 |= (1<<OCIE2A);		// Tmr/Cntr2 CompareA interrupt enabled
    }     
    /* ============================================================================== */
    Da ich gerade beim Initialisieren bin, initialisiere ich auch gleich die beiden
    externen Interrupts:
    Code:
    /* ============================================================================== */
    /* ===  Initialisierung fuer EXT_INT0/1 auf Pin 4+5/PD2,3 bei m168  ================
    $002 jmp SIG_INTERRUPT0 ; IRQ0 Handler   _VECTOR(1)
    $004 jmp SIG_INTERRUPT1 ; IRQ1 Handler   _VECTOR(2)              ================ */
    void XTI_0_1_init( void )	
    {				//Initialisiere beide Interrupts auf rising edge
    				//  d.h. EICRA ISC00,01,10+11 auf 1 (doc,S68)
        EICRA |= (1<<ISC11)|(1<<ISC10)|(1<<ISC01)|(1<<ISC00);
        EIMSK  |= (1<<INT1)|(1<<INT0);	//  und erlaube diese I´s in EIMSK
    // Initialisierung der Zeiten:  // Der Kürze wegen hier nur für Kanal 0
      Iz_diff0     = 0;             // Differenz zwischen dem aktuellen und dem
                                    //   vorhergehenden Interrupt auf Kanal 0
      Iz_xseci0    = 0;             // Aktueller Zeitwert (Stand des 50µsec-Zählers)
                    // Lies die Variable mal so: Integer Zeit "X" (regelungstechnisch
                    //   wird mit "X" der Ist-Wert bezeichnet sec => in Zeiteinheiten,
                    //   aber eben nicht sec sondern 50 µsec, i => istwert 0 .. Kanal
      Iz_xsecv0    = 0;             // Vorhergehender Zeitwert auf Null initialisieren
    }
    /* ============================================================================== */
    Damit meine Zeiteinheit = 50 µs-Zeitscheiben ausgewertet wird, gibts ne ISR, die diese 50µs-Zeitschnippsel hochzählt:
    Code:
    /* ============================================================================== */
    /* ===  Nicht unterbrechbare ISR für timer2 ===================================== */
    /* Routine zählt hoch im Takt 20 kHz = 50 µs.
        ==> Eine Zeiteinheit ist also 50 µs ! Der Zählerwert wird von den ISR für
    	EXT_INT0 und ~INT1 ausgelesen und den Werten Iz_yseci zugewiesen ......   */
    ISR(TIMER2_COMPA_vect)          // Vektor 7
    {
      if (Izeit_1 < 60000)          //Timer bis 60 000 ==> 3 sec Datenerfassung möglich
        Izeit_1 ++;                 //  und Izeit_1 bleibt in der uint16-Grenze
      else
      {   
        Izeit_1 = 0;		// ansonsten: Rückstellen auf Null
      }         
    }         
    /* ============================================================================== */
    Das Auslesen der Zeitdauer erfolgt in einer ISR die bei fallender Flanke am Pin (siehe Routine) ausgelöst wird:
    Code:
    /* ============================================================================== */
    /* ===  Nicht unterbrechbare ISR für EXT_INT0 auf Pin 46/PD2/mega168  =========== */
    /* Routine rechnet den Zeitbedarf vom vorhergehenden zum jetzigen Interrupt aus,
       dieser Wert wird z.B. von der Regelung ausgelesen (nur dumm, wenn das erst nach
       dem nächsten Interrupt passiert - das ist bei mir aber nicht der Fall! Nennt sich
       Softwareengineering *ggggggg*
         Der zugehörige Motor auf PD7/PB0 = re,li und PB1 Geschwind./PWM              */
      ISR(INT0_vect)                // hiess mal: ISR(SIG_INTERRUPT0)
    {                               // 
        Iz_xseci0 = Izeit_1;		//Weise Iz_xsec1 dem akt. Timerwert zu
        Iz_diff0 = Iz_xseci0-Iz_xsecv0;	//Neue Zeit-Differenz0 ausrechnen
        Iz_xsecv0 = Iz_xseci0;		//der aktuelle Zeitwert wird "Alter"
    }
    /* ============================================================================== */
    So, das ist die ganze Sache. Wie bereits erwähnt, bei mir läufts - und die Coladose läuft mit zwei getrennten Motoren prächtig geradeaus. Achtung: es gibt sicher mehrere und auch bessere Möglichkeiten und verständlichere Variablen *gggg*.

    Jetzt hoffe ich nur, dass ich nichts vergessen habe und nicht irgendeine Zeile entfernt habe, die für Deine Zwecke eher verwirrend wäre.

    Viel Erfolg

    Viel Glück.
    Ciao sagt der JoeamBerg

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.614
    Okay Drehzahlmessung per Zeit schau ich mir mal näher an - ganz verstanden hab ichs noch nich aber das liegt an den Ferien und der Uhrzeit

    Danke soweit - ich häng hier noch was an wenn ich noch fragen hab


    Die ColaDose läuft übrigens nicht zwingend wegen der Drehzahlmessung geradeaus

  3. #13
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    Zitat Zitat von BlackDevil
    ... Die ColaDose läuft übrigens nicht zwingend wegen der Drehzahlmessung geradeaus ...
    Da hast Du natürlich völlig recht: die Genauigkeit der Drehzahlmessung hat allerdings erheblichen Einfluss auf die mögliche Genauigkeit der Regelung. Da ich zwei voneinander völlig getrennte Antriebe haben, ist der Geradeauslauf nur dann möglich, wenn die Vorgaben an die Antriebe genau befolgt werden - und da schließt sich der Kreis zur Drehzahlmessung *ggg*.

    Zitat Zitat von BlackDevil
    Okay Drehzahlmessung per Zeit ... ganz verstanden hab ichs noch nich ...
    Uuups - wieso? Wenn ich die Zeit für eine (halbe) Umdrehung des Motors habe, kann ich daraus die Drehzahl berechnen. Notfalls führe ich das noch aus.
    Ciao sagt der JoeamBerg

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.614
    Mein Denkfehler hängt wohl die ganze zeit bei den Inkrementalscheiben
    Bild hier  

    Die ich die ganze Zeit anders im Kopf hatte (mit zwei Verdrehten Strich scheiben drauf). Wenn ich natürlich eine Scheibe nehme die nur einen Strich drauf hat und ich weis wie lang der Strich brauch um wieder zu kommen, kann ich so die Drehzahl messen. Wobei mir da die Zeit eigentlich auch egal is, ich könnte jede 1 Zählen ^^

  5. #15
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    Zitat Zitat von BlackDevil
    Mein Denkfehler hängt wohl die ganze zeit bei den Inkrementalscheiben ... mit zwei Verdrehten Strich scheiben drauf ...
    ... die sind ja (nur) für die Drehrichtungserkennung notwendig.

    Zitat Zitat von BlackDevil
    ... Wenn ich natürlich eine Scheibe nehme die nur einen Strich drauf hat und ich weis wie lang der Strich brauch um wieder zu kommen, kann ich so die Drehzahl messen ...
    Fast richtig. Wenn Du viele Striche drauf hast und weisst wie viele das sind - und die sind gleich verteilt - dann kannst Du mit dieser "Übersetzung" natürlich in ähnlicher Weise die Drehzahl ausrechnen. Du musst eben die Zeit für eine Teilung mit der Anzahl der Teilungen multiplizieren, dann kannst Du daraus die aktuelle Geschwindigkeit zu der Zeit der Abstandsmessung errechnen. Ok?
    Ciao sagt der JoeamBerg

  6. #16
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.614
    Ija klar, ich weis nur noch nich wieso ich die Zeit messe wenn ich doch auch einfach messen kann wie oft eine 1 vorbei kommt :-D Oder ist die Zeit (logisch eigentlich) in sofern Wichtig das ich gleich weis "Aha! 20x in einer Sekunde, das sind 120mal in der Minute!"?

    Was völlig untern Tisch viel, ist die Frage ob ich mit dem USB Programmer ein Terminal Programm ansteuern kann und wie?
    Soll sich um den http://www.ulrichradig.de/ Programmer handeln

  7. #17
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Bei so vielen Strichen kann man auch schon zählen, bei weniger Strichen wird aber die Auflösung beim Zählen relativ schlecht. Wenn man jeweils 1 s lang zählt krigt man bei den schätzten 100 Strichen eine Auflösung von 1/100 Umdrehungen je Sekunde oder rund 1 U/Min. das sollte normalerweise reichen.
    Bei nur wenigen Strichen ist es halt besser die Zeit zwischen 2 Strichen zu messen.

    Vom Terminalprogramm wird man einen ersten test machen können um z.B. die Software Version des Programmer auszulesen. Zum eigentlichen Programmieren braucht man eine Programm wie AVRDUDE oder eventuell Ponyprog. AVRDUDE ist schon im WinAvr Paket enthalten.

  8. #18
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.614
    Klar man brauch ein Programm, Hyperterminal fällt mir da spontan ein, fraglich is nur ob ich über den Programmer Kommunizieren kann und wie (Software/Hardware).

    Das heist ich nehm so eine oder eine ähnliche Scheibe. Ich zähle über jede Sekunde wieviel Striche vergangen sind und rechne damit meine Umdrehung aus (Max/Ist) und freue mich?

    Ich weis auch net - ich bin net dumm und im oberen drittel meines Jahrganges, aber bei sowas schmier ich hirnlich total ab Oo

  9. #19
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    Zitat Zitat von BlackDevil
    ... Was völlig untern Tisch viel ... mit dem USB Programmer ein Terminal Programm ansteuern ...
    Ich kenne den genannten Programmer nicht, sage aber trotzdem: vermutlich nicht möglich. Denn ein Programmer spricht MISO, MOSI und SCK an - nicht aber TX und RX.
    Zitat Zitat von BlackDevil
    ... Die gemessenen Drehzahlen und die verstrichene Zeit soll dann über den USB Logger auf den PC Übertragen werden, in das Terminal, und als Excel Datei speicherbar sein ...
    Das macht man hier im Forum relativ häufig, zum Beispiel hier , meist über die RS232.

    Zitat Zitat von BlackDevil
    ... aber bei sowas schmier ich hirnlich total ab ...
    Heee, langsam. Es sieht von "aussen" oft reichlich schwierig aus, wenn man es dann geschafft hat, wundert man sich ebenso oft, wie einfach es dann doch ist. Dazwischen liegt natürlich Arbeit.
    Ciao sagt der JoeamBerg

  10. #20
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.614
    Hmm dann werd ich mich mal mit dem Radig kurzschliesen ob das nich doch geht. Diese hässliche USB RS232 Problematik, ich hab weder LPT noch RS232 an meinem Arbeits PC und mein großer ... da is kein Platz für solche Basteleien (ich hab auch keinen Platz für einen alten PC ..)

    Gut ich grübel mla weiter ^^

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

12V Akku bauen