www.mikrocontroller.net

Forum: Compiler & IDEs Atmega8 - 4MHz Osszi - Arbeitstakt messen oder auslesen


Autor: Calik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Atmega8, 4MHz Osszilator.
Wie kann ich den freuenz (Takt) mit einem ossziloskop messen oder
auslesen, bei der der mc z.B. eine For-Schleife abarbeitet.

LED an.
for (i = 0x0; i < 0xffffff; i++){}
LED aus.

Kann ich dies auch anders realisieren um Energie zu sparen?
Habe leider keine Ahnung von Interrupts (Anfänger).

Danke.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Oszi ist nur ein Schätzeisen, nur etwa 10..1% genau (ein Ossi ist
was völlig anderes).

Entweder einfach den erzeugten Assembler ansehen und die Befehle
addieren oder im Simulator sich die Laufzeit anzeigen lasssen.

Oder vor Programmeintriit eine Timer starten und danach wieder stoppen,
das ganze dann über die UART ausgeben lassen.

Letzteres ist sinnvoll bei Echtzeitanwendungen, die nicht angehalten
werden dürfen.


Peter

Autor: Calik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal vielen dank @ Peter.

Ich programmiere in C (Versuch ich auf jeden Fall). Also wenn ich dich
so richtig verstehe, kann ich so programmieren, dass ich am Anfang der
Funktion eine Zeit starte und wenn diese Zeit abgelaufen ist steigt es
aus der Funktion wieder raus, richtig?

Das wäre natürlich super toll, genau sowas möchte ich eigentlich
realisieren. Kannst du mir (oder auch irgendjemand aus dem Forum)
verraten, wie das geht?

Gruß Calik

Autor: Calik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tach.

Also ich habe nun die FAQ in AVR-libs und Datenblatt die entsprechenden
Stellen gelesen.Ich habe schon einiges dazugelernt, ich weiss aber immer
nicht so richtig, wie ich das programmieren kann.

#include <avr/io.h>
#include <inttypes.h> //variablen für den timer
#include <avr/signal.h>

#define F_CPU   4000000   // 4MHz
#define UART_BAUD_RATE   9600
#define UART_BAUD_SELECT (F_CPU/ (UART_BAUT_RATE*161)-1)



void Phase1 (void);
void Phase2 (void);
void Phase3 (void);
void Stoerung (void);
void InitVar (void);

typedef unsigned char BYTE;
typedef unsigned char  uint8_t;
typedef unsigned char  uint16_t;

BYTE   x;

int main (void){
   Phase1();
   Phase2();
   Phase3();
} //end of main


void InitVar (void){

   /* Port C, Pin 0..3 als Output */
   DDRC=(1<<DDC3)|(1<<DDC2)|(1<<DDC1)|(1<<DDC0);
   /* Pullups */
   PORTB=(1<<PB1)|(1<<PB0);
   PORTD=(1<<PD7)|(1<PD6)|(1<<PD5)|1<<PD4);

}

void Phase1 (void){
   InitVar();
   if (bit_is_clear (PINB, PINB1){
   PORTC=0x03;  // Ausgänge setzen
   } //end of if

   while (1){
   read_timer1();
   x=PORTD;
   if (x!=0x05){
   Stoerung ();
   } // end of if
   } //end of while

   read_timer1 (void){

     unsigned int i;
     unsigned char sreg;

     /* Set TCNT1 to 0x01FF */

     TCNT1 = 0x1FF;

     /* Read TCNT1 into i */
     i = TCNT1;

     uint8_t sreg;
     uint16_t val;

     sreg=SREG;
     cli();

     SREG=sreg;

     return i;
   } //aus avr-libs und Datenblatt


Also meine Frage an alle:

 wie muss ich prog, damit 30 minuten die Ausgänge 0 und 1 von PORTC
high bleiben und nur bei Störung (Eingänge PORTD überwachen) oder bei
Zeitablauf (30 MINUTEN)diese verlässt?
Und sonst irgendwelche Fehler?

Danke schon mal für eure Hilfe.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.