mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Taktfrequenz des Mikrocontrollers


Autor: digger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: bensch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ausrechnen, wieviele Takte diese Schleife braucht.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#ifndef F_CPU
#define F_CPU 8000000UL
#endif

#include <avr/io.h>
#include <utils/delay.h>

int main()
{
  DDRC = 0xFF;

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

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.

Autor: digger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas Burkhart (escamoteur)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: digger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oke,.. Merci an allen

Autor: Tester (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tester (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Punkt 4: Gemeint sind natürlich die Controllerseitigen Datenleitungen!

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tester (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Walter Tarpan (nicolas)
Datum:

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

Autor: digger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tester (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tester (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tester (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: digger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: digger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tester (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dieser Code ist für eine Beschaltung die ich dir vorgeschlagen habe:

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...


Dieser Code hier sollte bei dir funktionieren:

http://www.mikrocontroller.net/articles/Erweiterte...



Viel Spass! Hoffe ich konnte ein wenig weiterhelfen

Autor: Tester (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@karl heinz buchegger:

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

Danke dir!!

Autor: digger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.