IR

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

rickeboy skrev:R7 och R8:a är onödiga, Reset räcker det med ett 10k motstånd till Vcc...

//Rille
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?
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

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.
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

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..:S

och om jag bara stoppar ner anoden på irdioden så lyser den blåa leden lite lite mer..
Användarvisningsbild
Hedis
Inlägg: 2493
Blev medlem: 8 december 2003, 15:10:44
Ort: Vänersborg
Kontakt:

Inlägg av Hedis »

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)
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

jag har varken en frekväns räknare eller ett oscilloskop :cry:

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?
Användarvisningsbild
Hedis
Inlägg: 2493
Blev medlem: 8 december 2003, 15:10:44
Ort: Vänersborg
Kontakt:

Inlägg av Hedis »

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.
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Inlägg av rickeboy »

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:

Kod: Markera allt

while (1) {

  if() {
  //Lys med ngt...
  } 

}
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
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

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;
}
}
så ser den koden jag använder ut.. är den fel?

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..
Användarvisningsbild
Xyzzy
Inlägg: 1260
Blev medlem: 30 januari 2004, 22:31:07
Ort: Uppsala, Sweden

Inlägg av Xyzzy »

Ska du läsa en pinne eller ports register (värde) ska du använda PINx (ex. "PINB" om det är portB)
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

j*klar :wall: får prova om de funkar i morgon..
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Virr3 skrev:

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;
}
}
så ser den koden jag använder ut.. är den fel?

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))
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;
}
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

jkag vet inte vad jag satt och gjorde.. aja.. ska kolla igenom bättre innnan ja postar här.. sorry..
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

provade din klod.. ingen skillnad..

lysdioden lyser lite lite mer..
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

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.
Användarvisningsbild
Hedis
Inlägg: 2493
Blev medlem: 8 december 2003, 15:10:44
Ort: Vänersborg
Kontakt:

Inlägg av Hedis »

Vilket värde är det på motståndet som sitter i serie med dioden?
Skriv svar