Sida 2 av 2

Re: Avr projekt funkar bara med isp inkopplad. Nybörjarmiss?

Postat: 20 juni 2019, 23:24:37
av Micke_s
Ja

Re: Avr projekt funkar bara med isp inkopplad. Nybörjarmiss?

Postat: 22 juni 2019, 14:24:58
av tokfan
Får jag fråga en basic fråga jag inte får ordning på:

Jag kom på att jag vill kunna läsa av om det är kortis i sladdarna jag testar. Jag vet inte vilken operand jag ska använda för att läsa av port så att det endast blir "True" om rätt pinne har spänning på sig.

Typ if(test_PIN & 0b00100000 ==1)
....tänd ok led.

Om någon annan pinne har spänning är det kortis och det ska inte tändas ok led.

Vet att det är grunder men jag får fasen inte koll på det.

Re: Avr projekt funkar bara med isp inkopplad. Nybörjarmiss?

Postat: 22 juni 2019, 15:37:15
av Micke_s
Gör såhär istället så slipper du jämföra med samma tal på båda sidorna, din kod kommer inte fungera.
Parentes runt och-instruktionen är bra också.

Jämföra mot 0 brukar också vara snabbare för många MCU:er...

Kod: Markera allt

if( (test_PIN & 0b00100000) != 0){
  //pin High
}

Kod: Markera allt

if( (test_PIN & 0b00100000) == 0){
  //pin Low
}

Re: Avr projekt funkar bara med isp inkopplad. Nybörjarmiss?

Postat: 22 juni 2019, 16:30:51
av tokfan
Nej fasen nåt blir galet.

XLR sladdarna har tre pinnar.
Nu lyser rätt diod om pinnen jag läser av får en spänning.
Den lyser också när pinnen bredvid får 5V på sig samtidigt (= tex kortis i xlr sladden).
Det är det jag vill undvika.
Den ska bara lysa när jag enbart har 5V på pinne 0b00100000. Annars ska ingen diod tändas då sladden är kass.

Här är mitt renodlade exempel:


Kod: Markera allt

int main(void)
{
	DDRB = 0x0F;
	PORTB &= 0xF0;
	DDRD = 0x0F;
	
    
	while(1)
    {
		
		
		if(debounce())
		{
			TEST_PORT |= TEST_OUT_2;
				
		}	
					
		if ((PIND & 0b00100000) != 0)
		{
				OK_LED_PORT|= OK_LED_2;
		}
		else
		{
				OK_LED_PORT = 0x00;
		}	 	 
	}		
					
			
}				

Re: Avr projekt funkar bara med isp inkopplad. Nybörjarmiss?

Postat: 22 juni 2019, 16:45:46
av tokfan
Jag upptäckte nu att PIND och PORTD styrs tillsammans eller vad man ska säga.
Trodde jag kunde skriva vad som helst till PIND utan att PORTD påverkades.

Skriver jag såhär så funkar det.
Ser dock inte så proffsigt ut.

(bit 1 skickas från PORTD för att sedan tas emot av bit 5 på PIND om sladden är hel.)

Kod: Markera allt


if ((PIND == 0b00100010) )
		{
				OK_LED_PORT|= OK_LED_2;
		}
		else
		{
				OK_LED_PORT = 0x00;
		}	 	 

Re: Avr projekt funkar bara med isp inkopplad. Nybörjarmiss?

Postat: 22 juni 2019, 17:09:42
av tokfan
Fast gjorde man såhär så ser det ändå ganska ordnat ut.
Har ingen aning om hur en som kan sånt här skulle lagt upp det.

Kod: Markera allt


if(TEST_PIN == (TEST_IN_2|TEST_OUT_2 )) 
{
	OK_LED_PORT |= OK_LED_2;
	
}