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
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.
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?
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.
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
@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
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.
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
@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
@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
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
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.
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
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
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.
@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