www.mikrocontroller.net

Forum: Compiler & IDEs delay funktioniert einfach nicht


Autor: tommi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
also ich habe heute mit gaaaanz einfachen schaltungen die delay_ms(x); 
funktion getestet.... also mit ner led blinkschaltung :P

ich habe einen atmel attiny 13 mit 20mhz fmax....
also mein code sieht so aus...

#include <avr/io.h>
#include <util/delay.h> // nicht
#include <avr/delay.h> //nicht util und avr im selben code, sondern habe 
das 2mal probiert..
#define F_CPU 20000000UL //hier habe ich fmax angegeben... stimmt das?ja 
oder?


void main(void)
{
DDRB = 0xff;
int i;
while(1);
{
PORTB = 0x01;
for(i = 0;i<84;i++)
{
_delay_ms(12);
}
PORTB = 0x02;
for(i=0;i<84;i++)//für ca. ne sekunde pro led
{
_delay_ms(12);
}

}

}

also wenn ich dass so anhänge, passiert entweder gar nichts, oder ein 
led leuchtet durchgehend und das andere gar nicht,

hab ich irgendwo einen fehler? hoffentlich könnt ihr mir 
weiterhelfen....


mfg

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> #define F_CPU 20000000UL //hier habe ich fmax angegeben... stimmt das?
Da solltest du die tatsächlich verwendetete Taktfrequenz angeben.
Welchen Oszillator verwendest du?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tommi wrote:
> #define F_CPU 20000000UL //hier habe ich fmax angegeben... stimmt das?ja
> oder?
Ob das stimmt, kannst nur Du selber sagen, weil hier im Forum niemand 
außer Dir weiß, ob Du tatsächlich einen 20 MHz-Quarz dranhängen hast. 
Wenn nicht, dann solltest Du entweder tatsächlich einen solchen 
dranhängen und die Fusebits entsprechend setzen oder aber 
(wahrscheinlich am sinnvollsten) im Programm die Frequenz angeben, mit 
der der µC auch wirklich läuft!

BTW:
Wenn Du mal so ungefähr 20 Sekunden wartest, müsste sich nach meiner 
Vermutung etwas ändern...

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
while(1); //hier bleibt er stehen!

Das ";" muß weg.

Autor: PillePalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das #define muss vor das #include :P
sonst weiß delay.h nicht welche Taktfrequenz

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger wrote:
> while(1); //hier bleibt er stehen!
>
> Das ";" muß weg.
Das ist goldrichtig!

PillePalle wrote:
> Das #define muss vor das #include :P
> sonst weiß delay.h nicht welche Taktfrequenz
Das auch!

Autor: tommi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
okay, daweil habt ihr mir sehr geholfen, und ich bin auch draufgekommen 
dass ich nicht mit 20mhz arbeite.....
also das problem ist, dass ich derzeit gar nicht mit einem 
quarzosszilator arbeite sondern den prozessor nur via franzis lehrpaket 
µc isp programmierung programmiere und dann mit steckbrett und drähte 
die leds anschließe, wie kann ich nun am besten die frequenz rausfinden, 
außer mit nem oszilloskop...?
also mit dem programm....
ahja ich bin via rs232 schnittstelle verbunden....

mfg

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zwei Wege:

1/ Studieren
Handbuch lesen, Schaltung betrachten, Fuses auslesen und mit Datenblatt 
vergleichen. Du kannst auch probieren, welche Baudraten funktionieren 
und  dann in dem Datenblatt unter UART nachsehen, bei welchen 
Einstellungen des Baudratenregisters der AVR dann laufen muss.

2/ Probieren
Annehmen dass der AVR mit 10 MHz läuft. Dann ein 1 Hz Blinken 
programmieren. Wenn es dann 10x langsamer blinkt, läuft der AVR statt 
mit 10 MHz mit 1 MHt. Die 10 MHz/1 MHz sollte man noch gut von Hand 
stoppen können. Du kannst auch eine andere Frequenz als 10 MHz 
probieren.

Autor: tommi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi, okay ich habs jetzt einfach ausprobiert, also naja mehr oder 
weniger...
ich hab einfach die frequenz die ich hatte durch die vorige 
"periodendauer" diviert und mit der frequenz funktioniert es :) danke 
auf jedenfall...

eine frage hätt ich jedoch noch...

das passt hier in den thread vl. nicht ganz rein, aber wie kann ich so 
ein LED display ansteuern, also ich hab mir das datenblatt mal genau 
angesehn, aber werd da irgendwie nicht schlauer....

es wäre dieses:
VISHAY - TDSL3150 - LED DISPLAY

also ich sehe wo der eingang pro segment ist, jedoch nicht wo gnd oder 
vcc wäre...

also vl. weiß jemand was...


danke schon mal :)

mfg

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tommi wrote:

> VISHAY - TDSL3150 - LED DISPLAY
>
> also ich sehe wo der eingang pro segment ist, jedoch nicht wo gnd oder
> vcc wäre...

Das hat kein Vcc und kein GND in dem Sinn. Schau dir mal den Artikel 
AVR-Tutorial: 7-Segment-Anzeige an. Das TDSL3150 hat Common Anode 
(gemeinsame Anode).

Datenblatt (Pinbelegung s. Seite 4 oben)
http://sigma.octopart.com/24701/datasheet/Vishay-T...

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

Bewertung
0 lesenswert
nicht lesenswert
Sowas findest du immer im Datenblatt

http://download.siliconexpert.com/pdfs/2008/07/31/...

> also ich sehe wo der eingang pro segment ist, jedoch nicht wo gnd oder
> vcc wäre...

Auf Seite 4 ist die Pinbelegung.
Pin 3 bzw. 8 sind A, also die gemeinsame Anode

Autor: B e r n d W. (smiley46)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Datenblatt des TDSL3150 lesen. Die gemeinsame Anode (Pin 3 und Pin 8) 
auf Plus. Die 8 Kathoden (einzelne Segmente) über z.B. 470 Ohm jeweils 
auf einen Prozessor Port. Gibt die CPU Das Signal Null auf einen 
Ausgang, dann leuchtet dieses eine Display Segment. Leider hat der 
ATtiny13 zu wenig Leitungen, um alle Segmente einzeln anzusteuern.

Eventuell solltest Du einen ATtiny 44 verwenden. Ansonsten ist ein 
Schieberegister wie z.B. 74HC595 notwendig oder ein Displaytreiber mit 
seriellem Eingang.

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.