Forum: Mikrocontroller und Digitale Elektronik Taktfrequenz des Mikrocontrollers


von digger (Gast)


Angehängte Dateien:

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

von bensch (Gast)


Lesenswert?

Ausrechnen, wieviele Takte diese Schleife braucht.

von Karl H. (kbuchegg)


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.

von digger (Gast)


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?

von Karl H. (kbuchegg)


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.

von Thomas B. (escamoteur)


Lesenswert?

Entscheidend ist, dass

#define F_CPU 8000000UL


richtig definiert ist, entweder im Code oder in den Projekteinstellungen 
im AVRStudio.

_delay_ms nimmt diesen Wert zum rechnen.

Gruß
Tom

von digger (Gast)


Lesenswert?

Oke,.. Merci an allen

von Tester (Gast)


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

von Tester (Gast)


Lesenswert?

@ Punkt 4: Gemeint sind natürlich die Controllerseitigen Datenleitungen!

von Hc Z. (mizch)


Lesenswert?

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

Nein, Bit 4..7 ist schon richtig.

von Tester (Gast)


Lesenswert?

Hc Zimmerer schrieb:
> Tester schrieb:
>> 4. Funktioniert dein Display? Normalerweise sollte man doch die
>> Datenleitungen 0-3 beim 4 BIT Modus verwenden.
>
> Nein, Bit 4..7 ist schon richtig.


Hast du meinen 2ten post auch beachtet?

Hier ist es nämlich anderst beschrieben:

http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD

von Walter T. (nicolas)


Lesenswert?

Am Controller ist es erstmal egal, an welchen Pins es hängt. Muß man 
sich die Nibbles halt zurechtschieben.

von digger (Gast)


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

von Tester (Gast)


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

von Tester (Gast)


Lesenswert?

Nicolas meint es ist auch so möglich wie du es hast.

Ich habe dass auf diese Weise auch schon mal probiert und es hat nicht 
funktioniert. Ob es vll. doch am Code lag steht aber in den Sternen

von Tester (Gast)


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.

von digger (Gast)


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

von digger (Gast)


Angehängte Dateien:

Lesenswert?

So, da ist mein Code. Ist von einem Kolleg programmiert worden. Mit 
einem Testprogram dazu.

Vllt habt ihr andere Testprograme wo ich ausprobieren kann.

gruss

von Karl H. (kbuchegg)


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.

von Tester (Gast)


Lesenswert?

Dieser Code ist für eine Beschaltung die ich dir vorgeschlagen habe:

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung


Dieser Code hier sollte bei dir funktionieren:

http://www.mikrocontroller.net/articles/Erweiterte_LCD-Ansteuerung



Viel Spass! Hoffe ich konnte ein wenig weiterhelfen

von Tester (Gast)


Lesenswert?

@karl heinz buchegger:

Endlich kommt mal eine Meldung von einem der sich in der Materie 
auskennt! :-)

Danke dir!!

von digger (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.