- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Allgemeine Fragen

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.614
    Anzeige

    Powerstation Test
    Klar, man kanns auch anders lösen aber
    <pre>
    try{
    // irgendwas
    } exception ( // Ausnahme ) { // MIST! }</pre>

    Ist nicht viel umständlicher. Ist geschmackssache denk ich


    Edit:
    Folgendes Problem
    <pre>#include <avr/io.h>
    #include <stdint.h>

    int main(void){
    DDRB |= (1 << 0); // Set LED as output
    TCCR1B |= (1 << CS12); // Set up timer at Fcpu/64

    for(;; ){
    if(TCNT1 >=62500){
    PORTB ^= (1 << 0); // Toggle LED
    TCNT1=0;
    }
    }
    }
    </pre>

    Meinen berechnungen zur folge müsste die LED 1mal Pro Sekunde Blinken. Das würde sie aber, laut Simulation, einmal in einem Jahr machen. Der Counter zählt Munter hoch und würde das bis zu 62500 tun... Takt ist 16Mhz

    Auf die 62500 komme ich mithilfe des AVR Freak Tutorials und der Formel die dort steht
    <pre>clc
    clear

    Target_Frequency=1;
    Prescale = [1 8 64 256 1024];
    Input_Frequency = 16e6;

    for m=1:5;
    Target_Timer_Count = (1 / Target_Frequency) / (Prescale(m) / Input_Frequency)
    end</pre>

    hab das dann mit MatLab berechnet und gesehen "Aha, 16bit Timer kommt sowieso in Frage, Prescaler nehm ich den 256er weil der perfekt in den 16bit Timer passt und gut...

    Oder liegt das an der Simulation?

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    37
    Beiträge
    519
    Hi

    Nutze bitte oben den CODE-Button, dann sieht der Code wesentlich leserlicher aus.


    Was du machst ist ziemlich umständlich...
    Timer sind dazu gedacht, dass sie neben dem Hauptprogramm laufen und sich dann melden, wenn ein entsprechendes Event aufgetreten ist.
    Du startest einen Timer und frägst ihn permanent auf seinen Wert ab, anstatt ihn ackern zu lassen und sich von selbst via Interrupt zu melden oder über die OCx Pins das Signal nach außen weiterzuleiten.

    Ich habe so einen Code noch nie genauer analysiert und kann dir auf die schnelle auch nicht sagen was daran falsch ist. Vielleicht liegt das Problem darin, dass du den Registerwert von TCNT1 ständig ausliest. Obwohl das laut dem Datenblatt keine Probleme machen dürfte (nur beim Schreiben kanns die geben).


    Mit der von dir angegebenen Formel werde ich auch nicht schlau was du damit machen willst.


    Okay, versuche einmal systematisch nur anhand des Datenblatts vorzugehen. Irgendwelche vorgefertigten Formeln sind zwar schön und gut, aber da tippt man meist irgendetwas ein ohne den tieferen Zusammenhang verstanden zu haben.

    Überlege dir zuerst was du mit dem Timer machen willst. Danach wählst du den Timer (8 oder 16 Bit) aus.
    Danach überlegst du dir wie du den Timer verwenden willst. Soll er einen externen Takt (PWM) erzeugen oder nur intern softwareseitig helfen?
    Wenn du einen ext. Takt willst dann musst du über das TCCRx Register und die COMx Bits die entsprechenden OCx Pins zuschalten. Willst du nur softwareseitig mit dem Timer arbeiten und einen software Interrupt auslösen dann musst du im TIMSK-Register das entsprechende Bit setzen.

    War jetzt sehr allgemein, aber ich weis nicht wo genau dein Problem liegt.



    Zu der Sache mit dem Exception-Handling noch

    Code:
    try{
    
     // irgendwas
    
    } exception ( // Ausnahme ) { // MIST! }
    Der Code ist zwar nicht umständlich aber er braucht wie vorher schon sagte eben mehr Speicher.

  3. #13
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Das würde sie aber, laut Simulation, einmal in einem Jahr machen.
    Du hast nicht etwa erwartet, dass der Simulator in Echtzeit läuft, oder?
    Die Laufzeit kannst du im Prozessor-Fenster unter "Stop Watch" beobachten.
    MfG
    Stefan

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    07.03.2008
    Ort
    Nürnberg
    Alter
    41
    Beiträge
    51
    Hi!

    Was du machst ist ziemlich umständlich...
    Timer sind dazu gedacht, dass sie neben dem Hauptprogramm laufen und sich dann melden, wenn ein entsprechendes Event aufgetreten ist.
    Du startest einen Timer und frägst ihn permanent auf seinen Wert ab, anstatt ihn ackern zu lassen und sich von selbst via Interrupt zu melden oder über die OCx Pins das Signal nach außen weiterzuleiten.
    Das steht so im von mir erwähnten Tutorial, der Code ist bloß eine erste Einführung. Da wird noch keine ISR benutzt. Erst ein paar Beispiele weiter gehts richtig los. Insofern hast du recht, macht SO noch keinen Sinn.

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.614
    Zitat Zitat von error41
    Hi!

    Was du machst ist ziemlich umständlich...
    Timer sind dazu gedacht, dass sie neben dem Hauptprogramm laufen und sich dann melden, wenn ein entsprechendes Event aufgetreten ist.
    Du startest einen Timer und frägst ihn permanent auf seinen Wert ab, anstatt ihn ackern zu lassen und sich von selbst via Interrupt zu melden oder über die OCx Pins das Signal nach außen weiterzuleiten.
    Das steht so im von mir erwähnten Tutorial, der Code ist bloß eine erste Einführung. Da wird noch keine ISR benutzt. Erst ein paar Beispiele weiter gehts richtig los. Insofern hast du recht, macht SO noch keinen Sinn.
    Genau - Mit ISR gefällts mir auch besser aber ich wollte erst mal den Spaß so testen und anschauen. Und ja, ich hab gedacht der Simulator läuft halbwegs in Echtzeit, so würde ich ja Jahre brauchen um den Flasher zu Simulieren

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

Solar Speicher und Akkus Tests