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
> #define F_CPU 20000000UL //hier habe ich fmax angegeben... stimmt das?
Da solltest du die tatsächlich verwendetete Taktfrequenz angeben.
Welchen Oszillator verwendest du?
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...
Das #define muss vor das #include :P sonst weiß delay.h nicht welche Taktfrequenz
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!
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
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.
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
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-TDSL3150.pdf
Sowas findest du immer im Datenblatt http://download.siliconexpert.com/pdfs/2008/07/31/semi_ap/2/vsh/led%20displays/83122.pdf > 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
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.
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.