Förstärka signal på 3.5 v till 5v

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

Förstärka signal på 3.5 v till 5v

Inlägg av Virr3 »

hejsan

jag undrar hur man enklast förstärker en signal på ca 3.5 v till 5?

transistor är ju ett altenativ, men finns det fler...

håller på med min stackars ledsnurra och ska försöka lära mig lite och inte bara koppla blint efter vad andra säjer...

jag tycker att det gått ganska okej hitils, men det är det att jag har en signal från en läsgaffel, och den vill inte komma över 3.5 volt så porten reagerar aldrig i atmegan...

aja, skulle vara tacksam för hjälp
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

det borde atmegan känna av, säker på att det inte är något annat fel ?

Kollade i databladet och där står det att gränsen är 0.6 * Vcc

Om du matar atmegan med 5V så är gränsen vid 3V

/Johan
Senast redigerad av strombom 10 september 2005, 13:08:54, redigerad totalt 1 gång.
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg av bengt-re »

3,5V lär väl tolkas som hög signal? Antar att det är C-MOS krets och då är allt över halva matningsspänningen hög signal. KOlla att du inte har något strul i programmet, för alla normal uP brukar tolka 3,5V som en klockren 1á.
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

DDRC= sen skiver man vilka bitar som ska va utgångar eller hur?

hur skriver jag om jag vill ha ingångar istället?

har nämligen inte satt den som ingång...
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

Utgång:
DDRC |= (1<<PIN_NUMMER);

Ingång:
DDRC &= ~(1<<PIN_NUMMER);

Flera på en gång:
Utgångar:
DDRC |= (1<<PIN_NUMMER) | (1<<PIN_NUMMER2);

Ingångar:
DDRC &= ~(1<<PIN_NUMMER) & ~(1<<PIN_NUMMER2);
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

Kod: Markera allt

int main()
{ 	
DDRC = _BV(PC0) | _BV(PC1) | _BV(PC2) | _BV(PC3)| _BV(PC4)| _BV(PC5)| _BV(PC6)| _BV(PC7)| _BV(PA5);

DDRC &= ~ _BV(PA2);

if (PINA & _BV(PA2))
{
       PORTB |= _BV(PC0);
	PORTB |= _BV(PC1);
	PORTB |= _BV(PC2);
	PORTB |= _BV(PC3);
	PORTB |= _BV(PC4);
	PORTB |= _BV(PC5);
	PORTB |= _BV(PC6);
	PORTB |= _BV(PC7);
}

}
Vad är de för fel? :(
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

varför har du PA5 och PA2 i DDRC ?
använd DDRA

/Johan
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

Kod: Markera allt

int main()
{ 

	
DDRC = _BV(PC0) | _BV(PC1) | _BV(PC2) | _BV(PC3)| _BV(PC4)| _BV(PC5)| _BV(PC6);
DDRA = _BV(PC7) | _BV(PA5);

DDRA &= ~ _BV(PA2);

 if (PINA & _BV(PA2))
{
    PORTB |= _BV(PC0);
	PORTB |= _BV(PC1);
	PORTB |= _BV(PC2);
	PORTB |= _BV(PC3);
	PORTB |= _BV(PC4);
	PORTB |= _BV(PC5);
	PORTB |= _BV(PC6);
	PORTB |= _BV(PC7);
}



}
funkar inte häller :(
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

varför har du PC7 i DDRA

hur kommer det sig att du kollar if (PINA & _BV(PA2)) direkt i mainkoden
är det inte bättre om du gör en liten loop så du kan kontrollera funktionen i lugn och ro
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

Kod: Markera allt

int main()
{ 
int i;
	
DDRC = _BV(PC0) | _BV(PC1) | _BV(PC2) | _BV(PC3)| _BV(PC4)| _BV(PC5)| _BV(PC6)| _BV(PC7);
DDRA =  _BV(PA5);

DDRA &= ~ _BV(PA2);

for(i;i<200;i++)
{
   if (PINA & _BV(PA2))
  {
        PORTB |= _BV(PC0);
        PORTB |= _BV(PC1);
        PORTB |= _BV(PC2);
        PORTB |= _BV(PC3);
        PORTB |= _BV(PC4);
        PORTB |= _BV(PC5);
        PORTB |= _BV(PC6);	
        PORTB |= _BV(PC7);

        _delay_loop_2(10000);
  }
}


}
så menar du eller?
varför jag la de direkt i main bara?

jo, det va så att jag va bara sugen på att se ifall det funkade, och det va de enklaste sättet, lös lysdioderna efter de att jag programerat den så funkade och om de inte gjorde de så funkade de inte, vilket det tyvärr inte gör...

kan tillägga att när jag ändrat lite nu och mätt upp, så är emitterspänningen på 5.5 v istället för 3.5...[/code]
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Nu har du ju en massa PC i dina PORTB-rader igen. Du ska aldrig blanda C och B, även om det fungerar ibland. Dessutom råder jag dig starkt att försöka lära dig bitoperationer ordentligt. Det kanske kan vara lite krångligt i början, men du kommer ha stor nytta av att kunna det.

Din kod ska med största sannolikhet se ut så här:

Kod: Markera allt

int main()
{
    DDRC = 0xFF; // Att sätta samtliga åtta bitar är det samma som 0xFF
    DDRA = _BV(PA5);

    //DDRA &= ~ _BV(PA2); // Du behöver inte nollställa biten PA2 eftersom den inte är satt. Se raden ovan.

    while (1) // Loopar för evigt
    {
        if (PINA & _BV(PA2))
        {
            PORTC = 0xFF;
        }
    }

    return 0;
}
> kan tillägga att när jag ändrat lite nu och mätt upp, så är emitterspänningen på 5.5 v istället för 3.5...

Vad för emitterspänning? Vilken spänning matar du AVR:en med? 5.5V låter lite farligt.
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

jag matar avr:en med 5v...

läsgaffeln har jag kopplat till batteriet, innan spännings regulatorn... annars får den inte tillräckligt..

jag kanske ska sätta ett motstånd efter fototransistorn?


nu är hela port c hög...

bara de att de är höga hela tiden, eller jag behöver inte sätta pa2 hög ens...



Btw: vart kan jag läsa om bitoperationer? jag har letat endel men inte hittat något som är riktigt bra, antar att de står lite i databladet för avr:en men, det gör mig bara förvirrad :(
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Då är 5.5V max vad AVR:ens i/o-pinnar tål! Inte bra.

*kollar din andra tråd om läsgaffeln*

Du ska enbart koppla E (emittern) till jord och C (kollektorn) till en i/o-pinne. Sedan aktiverar du det interna pullup:et i AVR:en för i/o-pinnen du kopplar den till. Det gör du genom att sätta pinnen till ingång (görs i t ex DDRA) och sedan sätta motsvarande bit i t ex PORTA för att aktivera pullup:et.
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

uräkta cykze :oops: men, skulle du inte kunna förklara det där igen?

är lite av en nybörjare, så, väldigt utförligt :)

skulle bli väldigt glad ifall du kunde göra de :)
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Berätta gärna vad du inte förstår i beskrivningen.
Skriv svar