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

Inlägg av Virr3 »

okej...
såhär tolkar jag de:

jag ska koppla emittern till jord, och kollektron till en i/o pinne. sen försår jag inte riktigt det där med pullup.. men, det gör jag genom att sätta den pinnen(som kollektorn kopplas till?) sen resten förstår jag inte...
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Antingen kopplar du ett motstånd mellan i/o-pinnen och matningsspänningen (5V), eller så använder du det inbyggda pullup-motståndet. Om vi antar att du kopplar kollektorn till PA2 så kan man göra så här,

Kod: Markera allt

int main()
{
    DDRC = 0xFF; // Sätter alla pinnar på PortC till utgångar
    DDRA = _BV(PA5); // Sätter PA5 till utgång.

    PORTA = _BV(PA2); // Aktivera pullup för PA2

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

    return 0;
}
Funktionen är sådan att alla pinnar på PortC sätts höga när PA2 är hög, annars sätts de låga.
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

förstår de inte riktigt det där med "pullup-motstånd"

men, om jag kopplar emittern till jord och kollektorn till pa2 och använder din kod så ska det funka...


sen ett problem som kom upp nu när ja testade lite... jo, de va så här att jag skulle testa ungefär hur stor resistans som skulle behövas...
jag seriekopplade några motstånd, men fortfarande 5v...

motstånden va på 2k så, jag började undra va fan som va fel, och testade ett motstånd och sen en diod, jag har ett svagt minne av att en 1N4148 har ett spänningsfall på 1,6v...

men, jag vet inte vad jag gjort för fel?:S tycker att det är lite konstigt....
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

> förstår de inte riktigt det där med "pullup-motstånd"

När transistorn i läsgaffeln leder så drar den kollektorn till emittern. Kopplar du emittern till jord och kollektorn till en i/o-pinne så dras i/o-pinnen till jord och du kommer läsa en 0:a, när inget ligger i vägen för lysdioden i läsgaffeln. Är det däremot något i vägen för läsgaffeln kommer transistorn spärra och kollektorn får inget riktigt bestämmt läge. Då kan AVR komma att läsa felaktiga värden från läsgaffeln. Därför kopplar man ett pullup-motstånd mellan i/o-pinnen och spänningsmatningen för att i/o-pinnen ska dras till matningsspänningen (en 1:a) när transistorn inte leder.

Ett pullup-motstånd är ett vanligt motstånd, som vanligtvis är på några kOhm. Antingen kopplar du dit ett manuellt eller så använder du AVR:ens inbyggda, som jag gör i koden ovan.

> sen ett problem som kom upp nu när ja testade lite... jo, de va så här att jag skulle testa ungefär hur stor resistans som skulle behövas...
jag seriekopplade några motstånd, men fortfarande 5v...

motstånden va på 2k så, jag började undra va fan som va fel, och testade ett motstånd och sen en diod, jag har ett svagt minne av att en 1N4148 har ett spänningsfall på 1,6v...


Går det ingen ström så blir det heller inget spänningsfall. Vad är det du vill göra?
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

*EDIT*

Frejo fick mig att inse hur det igentligen va :)

ett stort missförstånd i den enklaste el-läran..

aja, sov så gott nu alla :)
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

i brist på tid har jag inte hunnit att testa förnsän nu...

lyckat resultat:)
fan va tufft de blev ;)

Superstort tack til dig cykze som tar dig tid att hjälpa:)
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

okej, nu har ja kommit så långt så att har skivit klart hela tecken-tabellen...

men, jag har ett litet problem(såklart)

det jag vill göra är att den ska börja om lopen när den snurrat ett varv...

Kod: Markera allt

while(1)
    {	
		while(PINA & _BV(PA2)) //här är det fel
		{
			V(); 
			_delay_loop_2(60000);
			I();
			_delay_loop_2(60000);
			R();
			_delay_loop_2(60000);
			R();
			_delay_loop_2(60000);
			E();
		}
	}
}
jag vet att det är helt galet, men jag har inte en enda aning hur jag ska lösa det...
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Du bör egentligen använda dig av en interrupt som du kopplar till läsgaffeln, för att inte missa någon puls.

Kod: Markera allt

volatile static uint8_t varv_klart;

// Interruptrutin för en stigande flank på Int0-pinnen
SIGNAL (SIG_
{
    varv_klart = 0;
}
i main:

Kod: Markera allt

while(1)
{   
      if (varv_klart==0)
      {
         V();
         _delay_loop_2(60000);
         I();
         _delay_loop_2(60000);
         R();
         _delay_loop_2(60000);
         R();
         _delay_loop_2(60000);
         E();

         varv_klart = 1;
      }
}
Flytta läsgaffeln från PA2 till Int0-pinnen. Kvar att göra är att ställa in så att du får en interrupt på stigande flank (eng. "rising edge") på Int0-pinnen. Och att fixa interruprutinen (hur ska raden "SIGNAL (SIG_" fortsätta?).
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

jag har letat i data bladet efter Signal, SIG_, interrupt osv. men, det enda jag får fram är

$002, EXT_INT0 och sen ett kodexempel som lyder:

Kod: Markera allt

void Move_interrupts(void)
{
/* Enable change of interrupt vectors */
GICR = (1<<IVCE);
/* Move interrupts to boot Flash section */
GICR = (1<<IVSEL);
}
men, det stämmer ju inte in alls på det andra...

det är lite svårt när jag inte vet riktigt vad det är jag letar eftere :oops:
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Enklaste sättet att ta reda på vilka interrupnamn som finns är att kolla i headerfilen för just den AVR du använder. Om det var en Mega32 du hade så kollar du i filen iom32.h . Jag kan ju säga att det är SIG_INTERRUPT0 som signalen heter.

Hela kapitlet "External Interrupts" handlar om detta.
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

Kod: Markera allt

SIGNAL (SIG_INTERRUPT0)
{
    varv_klart = 0;
}


int main()
{ 

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

while(1)
{   
      if (varv_klart==0)
      {
         V();
         _delay_loop_2(60000);
         I();
         _delay_loop_2(60000);
         R();
         _delay_loop_2(60000);
         R();
         _delay_loop_2(60000);
         E();

         varv_klart = 1;
      }
}

}
och med den koden får jag felmedelandet:

binary.c:634: warning: return type defaults to `int'
binary.c:634: warning: function declaration isn't a prototype
binary.c: In function `SIGNAL':
binary.c:634: warning: type of "__vector_1" defaults to "int"
binary.c:636: warning: control reaches end of non-void function
binary.c: At top level:
binary.c:640: warning: function declaration isn't a prototype

sen om jag provar att göra såhär:

Kod: Markera allt

SIGNAL (SIG_INTERRUPT0_VECTOR(1))
{
    varv_klart = 0;
}


int main()
{ 

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

while(1)
{   
      if (varv_klart==0)
      {
         V();
         _delay_loop_2(60000);
         I();
         _delay_loop_2(60000);
         R();
         _delay_loop_2(60000);
         R();
         _delay_loop_2(60000);
         E();

         varv_klart = 1;
      }
}

}
och då får jag följande av kompilatorn:
binary.c:633: error: parse error before '(' token
binary.c:640: warning: function declaration isn't a prototype

rad 633 är översta raden, alltså; SIGNAL (SIG_INTERRUPT0_VECTOR(1))
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Kan du visa hela koden?
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

visst kan ja de...

Kod: Markera allt


/*
******************************************************
Detta är ett program för en "ledsnurra", vad det är förnågot
kan du se genom att tanka hem filmen  på 
"http://stuffnet.1go.dk/Ledsnurra.avi"

Försökt att förklara så noga som möjligt men, om det är
något som du inteförstår så är det bara att maila mig  
så ska jag svara så snart som jag kan.


Du får gärna använda denna kod men, då vill jag att du
skriver att det är jag som gjort den(alltså ha kvar texten
mellan stjärnorna här)


Mail: limpan456@gmail.com
hemsida: http://stuffnet.1go.dk
AV: Viktor Lindström
OBS: ta inte bort denna texten som är mellan stjärnorna
*******************************************************
*/




#include <avr/io.h>
#include <avr/delay.h>
#include <inttypes.h>
#include <avr/iom32.h>
/*först och främst ska man inkuldera alla bibliotek så att kompilatorn förstår alla utryck*/

void A(void);/*funktion för bokstaven A*/
void A(void)
{
	/*Använder endast 7 av 8 lysdiod därav är den sista biten(understa lysdioden) låg helatiden.
	Så att det inte blir några missförstånd, att jag skriver alla så menar jag 
	alla som ska användas*/


	PORTC = 0b01111110;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10010000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10010000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10010000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b01111110;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}
void B(void);/*funktion för bokstaven B*/
void B(void)
{
	PORTC = 0b11111110;/*alla lyser*/
	_delay_loop_2(3000);/*väntar en liten stund innan nästa anrop sker*/
	PORTC = 0b00000000;/*nollar alla*/
	_delay_loop_2(3000);
	PORTC = 0b10010010;/*översta, mittre och understa lysdioden lyser*/
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10010010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10010010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b01000100;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}
void C(void);/*funktion för bokstaven C*/
void C(void)
{
	PORTC = 0b01111100;/*alla lyser förutom översta och understa*/
	_delay_loop_2(3000);
	PORTC = 0b00000000;/*nollar alla*/
	_delay_loop_2(3000);
	PORTC = 0b10000010;/*understa och översta lyser. Börjar fatta hur de funkar nu va? */
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b0100100;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}
void D(void);/*funktion för bokstaven D*/
void D(void)
{
	PORTC = 0b11111110;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b01000100;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00111000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}
void E(void);/*funktion fÖr bokstaven E*/
void E(void)
{
	PORTC = 0b11111110;/*alla lyser*/
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10010010;/*yttersta och den mittre lyser*/
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10010010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10010010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10000010;/*bara de yttersta*/
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}
void F(void);/*funktion för bokstaven F*/
void F(void)
{
	PORTC = 0b11111110;/*alla lyser*/
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00010010;/*mittre och översta lyser*/
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00010010;
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00010010;
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00000010;/*översta lyser*/
}
void G(void);/*funktion för bokstaven G*/
void G(void)
{
    PORTC = 0b01111100;/*alla utom den översta och understa*/
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10000010;/*bara den översta och understa*/
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10010010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10010010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b01011110;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}
void H(void);/*funktion för bokstaven H*/
void H(void)
{	
	PORTC = 0b11111110;/*alla lyser*/
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00010000;/*mittersta lyser*/
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00010000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00010000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b11111110;/*alla igen*/
	_delay_loop_2(3000);
}
void I(void);/*funktion för bokstaven I*/
void I(void)
{
	PORTC = 0b10000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b11111110;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}
void J(void);/*funktion för bokstaven J*/
void J(void)
{
	PORTC = 0b00000100;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b11111100;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10000000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	
}
void K(void);/*funktion för bokstaven K*/
void K(void)
{
	PORTC = 0b11111110;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00010000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00101000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b01000100;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}
void L(void);/*funktion för bokstaven L*/
void L(void)
{
	PORTC = 0b11111110;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}
void M(void);/*funktion för bokstaven M*/
void M(void)
{
	PORTC = 0b11111110;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b01000000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00110000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b01000000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b11111111;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	
}
void N(void);/*funktion för bokstaven N*/
void N(void)
{
	PORTC = 0b11111111;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b01000000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00100000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00010000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b11111111;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}
void O(void);/*funktion för bokstaven O*/
void O(void)
{
	PORTC = 0b01111100;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b01000000;
	_delay_loop_2(3000);
	PORTC = 0b01111100;
}
void P(void);/*funktion för bokstaven P*/
void P(void)
{
	PORTC = 0b11111110;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10010000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10010000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10010000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b01100000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}
void Q(void);/*funktion för bokstaven Q*/
void Q(void)
{
	PORTC = 0b01111100;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10001010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10000100;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b01111010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}
void R(void);/*funktion för bokstaven R*/
void R(void)
{
	PORTC = 0b11111110;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10010000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10011000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10010100;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b01100010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}
void S(void);/*funktion för bokstaven S*/
void S(void)
{
	PORTC = 0b01100100;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10010010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10010010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10010010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b01000110;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}
void T(void);/*funktion för bokstaven T*/
void T(void)
{
	PORTC = 0b10000000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10000000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b11111110;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10000000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10000000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}
void U(void);/*funktion för bokstaven U*/
void U(void)
{
	PORTC = 0b11111100;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b11111100;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}
void V(void);/*funktion för bokstaven V*/
void V(void)
{
	PORTC = 0b11111000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00000100;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00000100;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b11111000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}
void W(void);/*funktion för bokstaven W*/
void W(void)
{
	PORTC = 0b1111000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00000110;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00111000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00000110;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b11111000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}
void X(void);/*funktion för bokstaven X*/
void X(void)
{
	PORTC = 0b10000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b01000100;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00111000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b01000100;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}
void Y(void);/*funktion för bokstaven Y*/
void Y(void)
{
	PORTC = 0b11000000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00100000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00011110;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b00100000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b11000000;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}
void Z(void);/*funktion för bokstaven Z*/
void Z(void)
{
	PORTC = 0b10000110;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10001010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10010010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b10100010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
	_delay_loop_2(3000);
	PORTC = 0b11000010;
	_delay_loop_2(3000);
	PORTC = 0b00000000;
}

volatile static uint8_t varv_klart;

// Interruptrutin för en stigande flank på Int0-pinnen
SIGNAL (SIG_INTERRUPT0_VECTOR(1))
{
    varv_klart = 0;
}


int main()
{ 

	
DDRC = _BV(PC0) | _BV(PC1) | _BV(PC2) | _BV(PC3)| _BV(PC4)| _BV(PC5)| _BV(PC6) | _BV(PC7); 
/*alla bitar i port c är höga.
man kan skriva "DDRC = 0x0f;" med men, det orkar jag inte ändra på, det krånglade lite för mig så, nu får de stå såhär
med "komandot" DDRC = 0x0f  gör alltså att alla bitar i port c blir utgångar, vill du använda någon annan port så skriver du
DDRA, DDRB, DDRC ect. det är alltså sista bokstaven där som bestämmer vilken av portarna som ska göras till utgång*/

PORTA = _BV(PA2); // Aktivera pullup för PA2

while(1)
{   
      if (varv_klart==0)
      {
         V();
         _delay_loop_2(60000);
         I();
         _delay_loop_2(60000);
         R();
         _delay_loop_2(60000);
         R();
         _delay_loop_2(60000);
         E();

         varv_klart = 1;
      }
}

}

orkar inte tabort alla komentarer, så du får ståut med dom, troligen några som jag skrivit helt fel på men, aja, där är koden iaf...
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Oj, det var ingen liten kod. ;)

Det ska vara "SIGNAL (SIG_INTERRUPT0)", som i ditt första försök. Men,

#include <avr/iom32.h>
ska bort och

#include <avr/interrupt.h>
#include <avr/signal.h>
ska läggas till

Sen ska du ställa in så att en interrupt triggas på stigande flank på Int0-pinnen. Du ska också ställa in så att Int0-pinnen (PD2) är en ingång med aktiverat pullup. Sen ska du aktivera globala interrupts (sei()).

Glöm heller inte bort att flytta läsgaffeln från PA2 till Int0/PD2.
Virr3
Inlägg: 840
Blev medlem: 25 juli 2004, 23:05:59
Ort: Göteborg

Inlägg av Virr3 »

Kod: Markera allt


volatile static uint8_t varv_klart;

// Interruptrutin för en stigande flank på Int0-pinnen
SIGNAL (SIG_INTERRUPT0)
{
	MCUCR ^= _BV( ISC00 );
	
    varv_klart = 0;
	
}

sei()  __asm__ __volatile__ ("sei" ::)
def cli()
ingroup avr_interrupts


int main()
{ 

DDRC = _BV(PC0) | _BV(PC1) | _BV(PC2) | _BV(PC3)| _BV(PC4)| _BV(PC5)| _BV(PC6) | _BV(PC7); 
/*alla bitar i port c är höga.
man kan skriva "DDRC = 0x0f;" med men, det orkar jag inte ändra på, det krånglade lite för mig så, nu får de stå såhär
med "komandot" DDRC = 0x0f  gör alltså att alla bitar i port c blir utgångar, vill du använda någon annan port så skriver du
DDRA, DDRB, DDRC ect. det är alltså sista bokstaven där som bestämmer vilken av portarna som ska göras till utgång*/

PIN &= ~ _BV(PD2) // Gör PD2 till ingång

PORTA = _BV(PD2); // Aktivera pullup för PA2

MCUCR = _BV( ISC01 );
GIMSK = _BV( INT0 );	

while(1)
{   
      if (varv_klart==0)
      {
         V();
         _delay_loop_2(60000);
         I();
         _delay_loop_2(60000);
         R();
         _delay_loop_2(60000);
         R();
         _delay_loop_2(60000);
         E();
         varv_klart = 1;
      }
}

}
det va de bästa ja kunde, men inte tillräckligt för det blir mängder med felmedelanden:

binary.c:644: error: parse error before "volatile"
binary.c:662: error: parse error before "volatile"
binary.c:663: error: parse error before "volatile"
binary.c:670: error: parse error before numeric constant
binary.c:670: warning: type defaults to `int' in declaration of `_delay_loop_2'
binary.c:670: warning: function declaration isn't a prototype
binary.c:670: error: conflicting types for '_delay_loop_2'
E:/WinAVR/bin/../lib/gcc/avr/3.4.3/../../../../avr/include/avr/delay.h:110: error: previous definition of '_delay_loop_2' was here
binary.c:670: warning: data definition has no type or storage class
binary.c:671: warning: type defaults to `int' in declaration of `I'
binary.c:671: warning: function declaration isn't a prototype
binary.c:671: error: conflicting types for 'I'
binary.c:226: error: previous definition of 'I' was here
binary.c:671: warning: data definition has no type or storage class
binary.c:672: error: parse error before numeric constant
binary.c:672: warning: type defaults to `int' in declaration of `_delay_loop_2'
binary.c:672: warning: function declaration isn't a prototype
binary.c:672: warning: data definition has no type or storage class
binary.c:673: warning: type defaults to `int' in declaration of `R'
binary.c:673: warning: function declaration isn't a prototype
binary.c:673: error: conflicting types for 'R'
binary.c:427: error: previous definition of 'R' was here
binary.c:673: warning: data definition has no type or storage class
binary.c:674: error: parse error before numeric constant
binary.c:674: warning: type defaults to `int' in declaration of `_delay_loop_2'
binary.c:674: warning: function declaration isn't a prototype
binary.c:674: warning: data definition has no type or storage class
binary.c:675: warning: type defaults to `int' in declaration of `R'
binary.c:675: warning: function declaration isn't a prototype
binary.c:675: warning: data definition has no type or storage class
binary.c:676: error: parse error before numeric constant
binary.c:676: warning: type defaults to `int' in declaration of `_delay_loop_2'
binary.c:676: warning: function declaration isn't a prototype
binary.c:676: warning: data definition has no type or storage class
binary.c:677: warning: type defaults to `int' in declaration of `E'
binary.c:677: warning: function declaration isn't a prototype
binary.c:677: error: conflicting types for 'E'
binary.c:139: error: previous definition of 'E' was here
binary.c:677: warning: data definition has no type or storage class
binary.c:678: warning: type defaults to `int' in declaration of `varv_klart'
binary.c:678: error: conflicting types for 'varv_klart'
binary.c:633: error: previous declaration of 'varv_klart' was here
binary.c:678: warning: data definition has no type or storage class
binary.c:679: error: parse error before '}' token

:oops: :roll: känner mig ganska usel ;)

aja, är otrolig tacksam för all hjälp :)
Skriv svar