es gibt es was :
http://www.mikrocontroller.net/artic...R-GCC-Tutorial
brauchst ca 1 jahr dafür um es zu kapieren.
es gibt auch noch schöne c-bücher für die grundregeln von c.
Hi,
nachdem ich heute verzwiefelt versucht habe C zu lehren, um die
Software diese D/A Wandler zu verstehen:
http://www.karlsaam.de/karlsaam_cms/node/37
habe ich es nach langen frustrierenden Versuchen aufgegeben und hoffe nun
auf Hilfe.
Das Programm funktioniert wunderbar, bis auf die TAtsache, dass ich es
net verstehe, und da ich es erstmal in Bascom umsetzen möchte wäre
ein Verständnis nicht schlecht.
Das Programm erzeugt mit 8 verschiedenen Wiederständen ein
Lautsprächer SIgnal. Es kann 8 bit Mono11khzAUdiodatein mit der
beiligenen Software abspielen.
Also hier der C Coder (wav.c)
Dazu kommt noch der wav.hCode:#include "wav.h" int play=0; unsigned char b; unsigned long SongPos=0; void init_wav(void){ DDRD=0xff; timer_enable_int(_BV(TOIE1)); TCCR1B |= (1<<CS10 | 0<<CS11 | 1<<CS12); TCNT1 = 65535 - (SYSCLK / 1024)/wav_sampling; sei(); } SIGNAL (SIG_OVERFLOW1){ TCNT1 = 65535 - (SYSCLK / 1024)/wav_sampling; if (play ==1){ b=pgm_read_byte_near(WAVE+SongPos); SongPos++; PORTD=b; if (SongPos > wav_size) { play=2; SongPos=0; PORTD=0; } } } PROGMEM unsigned char WAVE[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ..... /* Zur übersicht weggelassen */ ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00 };
So die anderen Files sind meiner Meinung nach eher unwichtig könnenCode:#ifndef _WAV_H #define _WAV_H #include <avr/interrupt.h> #include <compat/deprecated.h> #define SYSCLK 8000000 #define wav_size 4939 #define wav_sampling 12000 #include <avr/pgmspace.h> extern PROGMEM unsigned char WAVE[]; extern int play; extern void init_wav(void); #endif //_WAV_H
aber auf der Seite von Karl Saam runtergeladen werden.
An dem Programm verstehe ich folgendes net:
- einmal das wav.h ist mir ein Rätzel, aber ich glaube dieses define
setzt eine Variable.
Das ist die Enable von Timer0
Das verstehe ich wieder net:timer_enable_int(_BV(TOIE1));
DannTCCR1B |= (1<<CS10 | 0<<CS11 | 1<<CS12);
dass müste der Timerwert sein oder?TCNT1 = 65535 - (SYSCLK / 1024)/wav_sampling;
Was bedeutet der Befehl "sei()" ?
Und das verstehe ich auch net:
Das ist meiner Meinung nach das was den Port dazu bringt ein TOnif (play ==1){
b=pgm_read_byte_near(WAVE+SongPos);
SongPos++;
PORTD=b;
if (SongPos > wav_size) { play=2; SongPos=0; PORTD=0; }
aus dem Lautsprecher zu bringen. Aber da ist keine Loop oder so was
in der Richtung.
In der liste sind dann die PWM Signale der 8 Ports, glaube ich, was net
heißt das es stimmt.
Zusätzlich hätte ich noch die Frage:
PORTD=0xHEX ZAHL.
Kann man die Hex Zahl auch durch einen Binärcode ändern so wie:
PORTD=0x00101000
Grüße Furtion
es gibt es was :
http://www.mikrocontroller.net/artic...R-GCC-Tutorial
brauchst ca 1 jahr dafür um es zu kapieren.
es gibt auch noch schöne c-bücher für die grundregeln von c.
....Kann man die Hex Zahl auch durch einen Binärcode ändern so wie:
PORTD=0x00101000.....
in der neuesten winavr-c-version ab mai 2007
Hi,
ich habe mir den Artikel schon durchgelesen, bis zu dem Punkt wo es um
die I/0s geht, danach habe ich versucht eine LED an und auszuschalten,
und danach einen andere und danach noch eine.... Was aber nicht
geklapt hat. Auch die Hilfe von Ulrich Radig hat mir net geholfen und
das aus der RN Wissen auch net.
Grüße Furtion
...wie/warum kann eigentlich ein gesperrter User Beiträge schreiben ???
Hi,
das habe ich mich auch schon gefragt.
Grüße Furtion
sei = set enable interrupts ... bedeutet, interrupts global eingeschaltet
Vor den Erfolg haben die Götter den Schweiß gesetzt
Hi,
ok "sei()" ist geklärt. Aber was mir noch einfällt wo wird er Prescal gesetzt?
Grüße Furtion
Lesezeichen