Taktfrequenz des Mikrocontrollers

Gast #1674005
Lesenswert?

Hallo zusammen

Ich wollte mal überprüfen ob mein Controller wirklich mit 8Mhz getaktet 
wird. -> Anhang Schema von uC

Mit dem Programli wollte ich das prüfen. Und zwar lasse ich eine LED 
einschalten und ausschalten ohne dazwischen irgendein Dilay zu 
schreiben. So, müsste jetzt das LED mit der von uC Taktfrequenz getaktet 
werden. oder?

Ich bekomme dort aber eine Periodendauer von 5us, was 200kHz entspricht.
Wie kann ich die Taktfrequenz mit der uC getaktet wird überprüfen?
-------------------------
#include <avr/io.h>
#ifndef F_CPU
#define F_CPU 8000000UL
#endif

int main()
{
DDRC = 0xFF;

while (1)
{
PORTC = 0b01000000;
PORTC = 0b00000000;
}
}
--------------------------

Danke und einen schönen Tag noch
Angehängte Dateien:
#1674017
Lesenswert?

1
#ifndef F_CPU
2
#define F_CPU 8000000UL
3
#endif
4

5
#include <avr/io.h>
6
#include <utils/delay.h>
7

8
int main()
9
{
10
  DDRC = 0xFF;
11

12
  while (1)
13
  {
14
    PORTC = 0b01000000;
15
    _delay_ms( 1000 );
16
    PORTC = 0b00000000;
17
    _delay_ms( 1000 );
18
  }
19
}

häng eine LED an Pin 6 an. Wenn die 1 Sekunde an ist und dann 1 Sekunde 
aus, dann läuft dein µC mit 8Mhz

Ist sie 8 Sekunden ein / 8 Sekunden aus´, dann läuft der µC mit 1Mhz

Dazu brauchst du kein Oszi oder sonstiges Equipment. LED und ein 
Zeitgefühl, welches zumindest Sekunden einigermassen korrekt einschätzen 
kann, genügen vollauf.
Gast #1674038
Lesenswert?

Ja, das ist richtig. Wenn ich ein Delay von 1s mache, dann blinkt das 
LED auch eine Sekunde. Das heisst der Controller taktet mit 8Mhz?

Mich würde auch interessieren, wie der Zusammenhang von Delay und 
Taktfrequenz ist. Wie wird das berechnet?
#1674056
Lesenswert?

digger schrieb:
> Ja, das ist richtig. Wenn ich ein Delay von 1s mache, dann blinkt das
> LED auch eine Sekunde. Das heisst der Controller taktet mit 8Mhz?

Yep.
(Sofern du Optimierungen eingeschaltet hast)

> Mich würde auch interessieren, wie der Zusammenhang von Delay und
> Taktfrequenz ist. Wie wird das berechnet?

_delay_ms ist so gebaut, dass genau bekannt ist, wie es vom Compiler 
übersetzt wird. D.h. wir wissen, wieviele Takte die innerste Schleife 
benötigt. Von da weg ist es dann ziemlich einfach. Wenn 1 Apfel 1 Euro 
kostet, wieviele 1 Euro Stücke benötige ich dann, wenn ich 1000 Äpfel 
kaufen will. Jetzt habe ich aber keine 1 Euro Stücke, sondern 8 Euro 
Scheine. Wieviele Geldscheine benötige ich dann? etc. etc.
Gast #1674156
Lesenswert?

@digger

Noch ein paar kleine Hinweise:

1. Ich hoffe dein LCD hat einen Vorwiderstand ansonsten ist es nach 
high-pegel an LCD_BG defekt.

2. AVCC muss auch angeschlossen werden wenn der ADC nicht verwendet wird 
soweit ich weiß. (Steht irgendwo im Datenblatt)

3. Gönn deinem 128er vielleicht noch 1-2 100nF Kondensatoren auf den 
Versorgungsleitungen. Die haben noch nie geschadet.

4. Funktioniert dein Display? Normalerweise sollte man doch die 
Datenleitungen 0-3 beim 4 BIT Modus verwenden.


Berichtigt mich bitte bei diesen Aussagen wenn sie nicht richtig sein 
sollten!

Grüße
Gast #1674221
Lesenswert?

@Tester

Danke für die Hinweise

1. Vorwiderstand wovür und wo genau meinst du?
2. AVCC habe ich angeschlossen, Schema ist nicht angepasst worden.
3. Kann man machen
4. Nein, funktioniert nicht. Bin verzweifelt am suchen woran das Problem 
liegen kann :(.

Meinst du so:
          LCD | uC
          DB0->PD4
          DB1->PD5
          DB2->PD6
          DB3->PD7

Gruss
Gast #1674244
Lesenswert?

@digger

zu 1.

Zwischen Kollektor von T1 und Pin 16 vom Displaystecker. (z.B 330 Ohm >> 
hängt aber vom Datenblatt des Displays bzw. der Displaybeleuchtung ab)

Wieso? -->> Weil es Displays gibt die für die Hintergrundbeleuchtung 
keinen Vorwiderstand vorgesehen haben und wie wir alle wissen kann man 
eine LED nie ohne Vorwiderstand betreiben.

zu 2.

ok alles klar!

zu 3.

ok

zu 4.

habs mir doch gedacht! Normal macht man es so:

LCD --> µC

DB4 --> PD0
DB5 --> PD1
DB6 --> PD2
DB7 --> PD3

Bei dir wird diese Adaption jedoch nicht mehr sehr einfach sein da du 
das Board vermutlich schon gefertigt hast.

Grüße
Gast #1674264
Lesenswert?

Bevor du da was umlötest:

SORRY!!

Nicolas hat doch recht. Bei mir war es nochmals anderst. Hab gerade 
nachgesehen. Sollte auch so funktionieren wie du es angeschlossen hast.
Vielleicht müsstest du einmal deinen Displaycode posten.
Gast #1674273
Lesenswert?

Soweit verstanden.

>Bei dir wird diese Adaption jedoch nicht mehr sehr einfach sein da du
>as Board vermutlich schon gefertigt hast.

Ja, das Board ist bereits gefertigt worden Doch da es nur ein Prototype 
ist kann ich daran noch basteln.

Bevor ich aber die Korrekturen mache, würde mich interessieren ob es 
wirklich an dem liegen kann.

gruss
#1674293
Lesenswert?

Der Code ist so geschrieben, dass die Anpassung an deine Pinbelegung 
möglich ist (wurde auch anscheinend schon gemacht).

Aufpassen solltest du, dass du im AVR-Studio in den Configuration 
Options auf jeden Fall die 8Mhz eingetragen hast. Diese Einstellung wird 
in den LCD Funktionen benötigt. Gut, der Programmierer war so schlau, im 
Falle des NIchtvorhandeseins einer F_CPU Vereinbarung selbst eine mit 
einem hohen Wert zu machen. Dadurch ist er auf der sicheren Seite, 
schlimmstenfalls sind dann Wartezeiten einfach nur zu lang, weil ja der 
Prozessor tatsächlich langsamer läuft als der Wert mit dem gerechnet 
wurde.
Gast #1674325
Lesenswert?

@Karl heinz Buchegger

Ja, die Pinbelegung habe ich angepasst, wie ich in Schema angeschlossen 
habe. In den Configuration Options habe ich die 8Mhz eingetragen.

Läuft aber immer noch nicht.


@Tester

Deine Vorschläge werd ich mir Morgen ausprobieren.



Danke an euch beiden

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren