-         

Ergebnis 1 bis 7 von 7

Thema: Probleme Fusebits

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.02.2010
    Beiträge
    7

    Probleme Fusebits

    Anzeige

    Hallo zusammen,


    da ich das auf die schnelle nicht finde, frage ich lieber gleich, dazu folgender Quelltext:

    /***Programmanfang***/
    #include <avr/io.h>

    #ifndef F_CPU
    #define F_CPU 16000000 //16MHz
    #endif

    int main(){

    DDRB = (1<<PB0); //PB0 auf Ausgang

    while(1){
    PORTB |= (1<<PB0); //einschalten und
    PORTB &= ~(1<<PB0); //sofort wieder ausschalten
    }
    return 0;

    }
    /***Programmende***/

    Das Programm soll natürlich mit maximaler Frequenz den PORT/PIN B0 ein und ausschalten. Ich bekomme aber 800kHz.

    Meine Fusebits:

    CKSEL = 1111 (16MHz Quarz)
    CKOPT = 0
    SUT0 = 0
    SPIEN = 0

    der Rest auf 1

    Frage 1:
    Dachte die maximale Frequenzausgabe liegt bei mindestens 1/2 F_CPU also 8MHz, stimmt das?

    Frage 2:
    Die Fusebits sind okay?

    Beste Grüße
    Frank

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Also 20 Takte für die vier Programmzeilen halte ich schon für realistisch.
    Wenn du die max. Frequenz an einem Pin benötigst, musst du dir einen Kontrolller suchen wie z.B. den Mega88 mit einem CLKO (Clockout) an PB0.

    Zum Einstellen der Fuses verwende ich das hier:
    http://www.engbedded.com/fusecalc/
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    08.02.2010
    Beiträge
    7
    Hallo Hubert,

    das ein/ausschalten eines PORTs müsste eine Periode dauern, deshalb gehe ich ja von 8MHz aus.

    Laut Datenblatt ist die maximal erreichbare Frequenz mit einem Timer: 8MHz, also 1/2 F_CPU.

    Die while(1) Abfrage dürfte 1,2 oder 3 Takte dauern, damit komme ich dann aber immer noch auf mehr als 800kHz. Auf dem Oszilloskop sieht das Rechteck ziemlich gleichmäßig aus(also gleiche Überschwinger, gleiches Abklingverhalten, gleiche Steilheit).

    Mein Problem sind eigentlich, die Fusebiteinstellungen. Die genannte Seite kenne ich, habe mich auch danach gerichtet.

    Ich meine vielleicht können die normalen PORTs das nicht, was ich aber nicht glaube.

    Danke für deine Antwort.

    Beste Grüße
    Frank

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Schau dir den Code mal im Assembler an, dann wirst du sehen das die 20 Takte realistisch sind.
    Der Timer läuft in Hardware, Ausgabe über den OCx. Da wäre es möglich das es geht, hab ich aber noch nie probiert.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    08.02.2010
    Beiträge
    7
    Also ich denke du hast recht, der Mega läuft so wie ichs vogesehen habe nicht bei der hohen Frequenz, aber der Quarz funktioniert.

    Besten Dank

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.383
    ich weis nicht ob der controller das kann, aber ich meine man müsste über das setzen einer 1 im PIN register den PORT toggeln können! (das hab ich jetzt in einer dunklen ecke meines gedächtnis gefunden)

    Code:
    while(1) PINB = 0x01; //alternativ (1<<PB0) oder einfach dezimal 1

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Sowas ähnliches gibts z.B. bei den C166V2.
    Bei den AVRs in C tuts da aber eher PORTB ^= (1 << Pinnr)
    #ifndef MfG
    #define MfG

Berechtigungen

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