så jag satte ett 10k där.. men kanske har något runt 47.. behöver jag värkligen inte kondingen mällan vcc och gnd som det står i databladet?rickeboy skrev:R7 och R8:a är onödiga, Reset räcker det med ett 10k motstånd till Vcc...
//Rille
IR
-
- Inlägg: 2360
- Blev medlem: 16 september 2003, 17:18:13
- Ort: Dubai, United Arab Emirates
- Kontakt:
Han menar R7 kan tas bort. R8 ersättas med ett en kabelstump. De 10K som han nämde ska mellan AVR'ens RESET och plus.
Du har ersatt ett 47 ohms motstånd (R8) och en konding med ett 10K motstånd - det är inte mycket att fundera på att det inte fungerar då.
Jag har sagt det förut, och jag komer säkert att säga det igen. Innan man vet vad man håller på med så är det bäst att bygga EXAKT efter någons färdiga och uttestade schema och få det att fungera INNAN man börjar göra egna modifieringar och ändringar på det.
Du har ersatt ett 47 ohms motstånd (R8) och en konding med ett 10K motstånd - det är inte mycket att fundera på att det inte fungerar då.
Jag har sagt det förut, och jag komer säkert att säga det igen. Innan man vet vad man håller på med så är det bäst att bygga EXAKT efter någons färdiga och uttestade schema och få det att fungera INNAN man börjar göra egna modifieringar och ändringar på det.
nu funkar den..jag får 4,47 eller något från ut pinnen på motagaren men lysdioden som ska indikera det lyser mycket svagt.. den får bara 2,33 ut från PB7.. den lyser så svagt at jag endast ser det ovanifrån..
om jag knappar på fjärrkontrollen så blinkar leden..
om jag tar bort irdioden fortsätter den att lysa..
och om jag bara stoppar ner anoden på irdioden så lyser den blåa leden lite lite mer..
om jag knappar på fjärrkontrollen så blinkar leden..
om jag tar bort irdioden fortsätter den att lysa..

och om jag bara stoppar ner anoden på irdioden så lyser den blåa leden lite lite mer..
Utsignalen ifrån ir-mottagaren är HÖG om den INTE får ngn 38khz modulerad data in.
Så att den lyser när du inte skickar data är inte så konstigt.
Om jag vore du så skulle jag först konstruera endeså mottagaren eller transmittern. INTE bägge samtidigt. Annars så vet du ju inte vilken utav dom som inte fungerar som den skall.
Jag har själv byggt en ir-transmitter och kan ju påpeka att pulstiderna måste vara mycket exacta, annars blir det pannkaka utav alltihop. Efterssom man bygger alltihop på fasta timer rutiner (iaf. jag) så om varje loop var ngn µS för lång så blir det många µS tillslut.
Så man behöver frekvensräknare eller oscilloskop. (och kunskapen att beräkna pulstid ifrån frekvens mm) F=1/T (T=Tid, F=Frekvens)
Så att den lyser när du inte skickar data är inte så konstigt.
Om jag vore du så skulle jag först konstruera endeså mottagaren eller transmittern. INTE bägge samtidigt. Annars så vet du ju inte vilken utav dom som inte fungerar som den skall.
Jag har själv byggt en ir-transmitter och kan ju påpeka att pulstiderna måste vara mycket exacta, annars blir det pannkaka utav alltihop. Efterssom man bygger alltihop på fasta timer rutiner (iaf. jag) så om varje loop var ngn µS för lång så blir det många µS tillslut.
Så man behöver frekvensräknare eller oscilloskop. (och kunskapen att beräkna pulstid ifrån frekvens mm) F=1/T (T=Tid, F=Frekvens)
jag har varken en frekväns räknare eller ett oscilloskop
jag byggde upp sändaren först och testade den med en blå lysdiod om den funkade och lysdioden lös och frekvänsen kaunde jag som sagt inte kolla men jag antog att det var rätt.. sen så satte jag mig och pillade på motagaren.. alltså har jag inte gjort båda sammtidigt utan med en dags mällanrum..
sak samma..
hur kan jag kolla om min sändare har rätt frekväns?
ska se om jag kan köpa en lite bättre multimeter.
någon att rekomendera?

jag byggde upp sändaren först och testade den med en blå lysdiod om den funkade och lysdioden lös och frekvänsen kaunde jag som sagt inte kolla men jag antog att det var rätt.. sen så satte jag mig och pillade på motagaren.. alltså har jag inte gjort båda sammtidigt utan med en dags mällanrum..
sak samma..
hur kan jag kolla om min sändare har rätt frekväns?
ska se om jag kan köpa en lite bättre multimeter.
någon att rekomendera?
Datorns ljudkort duger fint till o mäta ir-datan. (dock inte 38Khz bärvågen)
Anslut ljudkortets ena kanal till Out på ir-mottagaren och jorden till bygget och kör tex. goldwave o spela in en snutt. Du kan ju även spela in en snutt ifrån din tv-fjärr så ser du hur det bör se ut
En sak som man får tänka på är att ljudkortet har kondingar på ingångarna så det är enbart växelspänning som kommer igenom. Så flankerna syns tydligt men även om signalen ligger stabilt på 5v så kommer den att sjunka i ljudprogrammet. Men för mig så fungerade det fint.
Anslut ljudkortets ena kanal till Out på ir-mottagaren och jorden till bygget och kör tex. goldwave o spela in en snutt. Du kan ju även spela in en snutt ifrån din tv-fjärr så ser du hur det bör se ut

En sak som man får tänka på är att ljudkortet har kondingar på ingångarna så det är enbart växelspänning som kommer igenom. Så flankerna syns tydligt men även om signalen ligger stabilt på 5v så kommer den att sjunka i ljudprogrammet. Men för mig så fungerade det fint.
Virr3>> Vilken kod använder du? Om du använder den på sidan innan så konstaterade jag nu att du endast kör den 1 gång! Sätt if satserna i en while sats typ:
Sen bör du se över så att du har tänkt och kodat rätt... dvs hur pinarna ska vara dvs om de ska vara höga/låga, input/output...
//Rille
Kod: Markera allt
while (1) {
if() {
//Lys med ngt...
}
}
//Rille
Kod: Markera allt
#include <avr/io.h>
#include <avr/delay.h>
#include <inttypes.h>
int main()
{
while (1)
{
if (PORTB = _BV(PD4)) // om PD0 är hög
PORTD |= _BV(PD5); //sätt PD1 hög
else
PORTD &= ~_BV(PB5); //sätt PD1 låg
return 1;
}
}
och varför lyser min lysdiod såpass lite? den får 2,34v av avr:en.. varför inte 5v?
den blinkar till när jag riktar fjärren mot den och byter kanal.. ingenting händer ifall jag tar bort ir dioden..
if (PORTB = _BV(PD4))Virr3 skrev:så ser den koden jag använder ut.. är den fel?Kod: Markera allt
#include <avr/io.h> #include <avr/delay.h> #include <inttypes.h> int main() { while (1) { if (PORTB = _BV(PD4)) // om PD0 är hög PORTD |= _BV(PD5); //sätt PD1 hög else PORTD &= ~_BV(PB5); //sätt PD1 låg return 1; } }
och varför lyser min lysdiod såpass lite? den får 2,34v av avr:en.. varför inte 5v?
den blinkar till när jag riktar fjärren mot den och byter kanal.. ingenting händer ifall jag tar bort ir dioden..
betyder att PD4 i PORTB sätts hög OM det hade varit en utgång. Därefter kollar if-satsen om PORTB är skiljt från noll. Inte vad du vill.
Som det redan har sagts i tråden så måste du börja med att tala om vilka pinnar som ska vara utgångar (höga eller låga) och vilka som ska vara ingångar (hög-ohmiga eller med pull-up). Det gör du genom DDRB och PORTB för PortB-pinnarna och genom DDRD och PORTD för PortD-pinnarna osv. Det är det mest grundläggande för att man ska få någonting gjort med µC:n.
DDRB är 8 bitar stor. Varje bit anger vilken pinne som ska vara ingång respektive utgång. Är en bit satt till 1 i DDRB så blir motsvarande port konfigurerad till att vara utgång. PORTB fungerar på liknande sätt. Är en bit för en pinne satt till 1 i DDRB så blir motsvarande pinne satt hög om den biten är satt till 1 i PORTB. Är biten för en µC-pinne satt till 0 i DDRB så blir betyder motsvarande 1:a i PORTB att porten får ett inbyggt pull-up-motstånd. Är den istället 0 betyder det att ingången är högohmig. Det står mycket bättre förklarat i databladet. Läs igenom avsnitten för I/O-portar.
Istället för
if (PORTB = _BV(PD4))
ska du ha
if (PIND & _BV(PD4))
Du kan ju inte blanda ihop PD4 med PORTB. D och B är inte ens samma port! Dessutom stämmer dina kommentarer inte alls, som du ser! Sen har du lagt return-satsen i while-loopen vilket betyder att programmet kommer avslutas efter en loop.
Läs ett tidigare inlägg av mig för lite bättre förklaringar
När du fått kläm på det här med bit-hanteringen har du kommit en bra bit på vägen. Ta och läs någon bra C-bok. Det kommer du ha stor nytta av.
Så här ska ditt program se ut:
Kod: Markera allt
#include <avr/io.h>
#include <avr/delay.h>
#include <inttypes.h>
int main()
{
DDRD = _BV(PD5); // Sätter PD5 till utgång
while (1)
{
if (PIND & _BV(PD4)) // om PD4 är hög
PORTD |= _BV(PD5); //sätt PD5 hög
else
PORTD &= ~_BV(PD5); //sätt PD5 låg
}
return 1;
}
Koppla bort Ir-mottagaren.
Dra en kabel mellan PD4 och +5V (eller vad du har för matningsspänning). Kolla spänningen på PD5. Den ska då vara på +5V (om du matar AVR:en med det).
Gör om samma sak men koppla PD4 till jord istället. Kolla spänningen på PD5. Den ska nu vara 0V.
Stämmer det så är det något annat som är fel.
Dra en kabel mellan PD4 och +5V (eller vad du har för matningsspänning). Kolla spänningen på PD5. Den ska då vara på +5V (om du matar AVR:en med det).
Gör om samma sak men koppla PD4 till jord istället. Kolla spänningen på PD5. Den ska nu vara 0V.
Stämmer det så är det något annat som är fel.