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
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.
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
@ Punkt 4: Gemeint sind natürlich die Controllerseitigen Datenleitungen!
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
Am Controller ist es erstmal egal, an welchen Pins es hängt. Muß man sich die Nibbles halt zurechtschieben.
@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.
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
@karl heinz buchegger: Endlich kommt mal eine Meldung von einem der sich in der Materie auskennt! :-) Danke dir!!
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.