Skocz do zawartości

Pomocna odpowiedź

Napisano

Witam.

Dziś w końcu przyszły części mojego małego programowalnego układziku, poskładałem idealnie według poniższego schematu:

Zaprogramowałem kodem:

#include <avr/io.h>
#include <util/delay.h>
#define B(x) (1<<x)

void Zapal( int p1, int p2, int p3 )
{
  if( p1 == 1 ) PORTB |= B(0);
  else PORTB &= ~B(0);
  if( p2 == 1 ) PORTB |= B(1);
  else PORTB &= ~B(1);
  if( p3 == 1 ) PORTB |= B(2);
  else PORTB &= ~B(2);

  _delay_ms(1000);
}

int main(void)
{
  DDRB = 0b111;
  while(1)
  {
     Zapal(1,0,0);
     Zapal(1,1,0);
     Zapal(1,0,1);
     Zapal(0,1,0);
     Zapal(0,1,1);
     Zapal(0,0,1);
     Zapal(1,1,1);
  Zapal(0,0,0);
  }
}

I 0 reakcji :/ Wszystko sprawdzałem z milion razy i nic ;/

Może coś nie tak ze schematem? Zrobiłem tak:

-Poskładałem układ

-podłączyłem programator

-Make All

-Make Program

i chyba powinno działać? Mój programator: allegro.pl/programator-usbasp-avr-atmel-isp-tasma-win7x64-pl-i2120160069.html

__________

Komentarz dodany przez: Treker

Zobacz czy w ogóle komputer wykrywa układ.Zalecam wejść w avrdude i wpisać

avrdude -p m8 -c usbasp

Jak wykrywa to zalecam twój kod jest dla mnie trochę za długi jak na migonie diodami:

#define F_CPU 1000000L
#include <avr/io.h>
#include <util/delay.h>

#include <stdlib.h>
int main (void)
{
DDRD = 0xFF;
PORTB |= _BV(PB0);
PORTB |= _BV(PB1);
PORTB |= _BV(PB2);
}

Jak nie wykrywa to sprawdź czy nie pomyliłeś MOSI z MISO i czy masz reszte sygnałów dobrze podłączone.

Te rezystory 1KΩ powinny być chyba za diodami a nie przed i nie 1K a coś koło 300Ω

Wejście w avr dude:

1.Robisz ikone avrdude.exe na pulpit.

2.Wchodzi w właściwości i w element docelowy z przodu dopisujesz cmd np.cmd H:\AVRDUDE\avrdude.exe

Czyli ci wykrywa spróbuj ten kod co ja napisałem.

Masz skonfigurowany WinAVR ?

Sprawdziłem, wszystko jest podłączone na 100% dobrze.

PORTC |= _BV(PB0) | _BV(PB1) | _BV(PB2)

Po wpisaniu tego Wyskakuje "Nazwa PORTC nie jest rozpoznawana jako polecenie wew. ani zew. Program wykonalny lub plik wsadowy." :/

[ Dodano: 21-02-2012, 17:46 ]

Masz skonfigurowany WinAVR ?

To znaczy?

Zalecam przeczytać:

http://www.forbot.pl/forum/topics20/szybki-start-z-winavr-vt513.htm

Taki kod tam cos namieszałem:

#define F_CPU 1000000L
#include <avr/io.h>
#include <util/delay.h>

#include <stdlib.h>
int main (void)
{
DDRD = 0xFF;
PORTB |= _BV(PB0);
PORTB |= _BV(PB1);
PORTB |= _BV(PB2);
}

Czyli dobrze się wgrało tak? AVR mam dobrze ustawione :| Dioda nawet nie mrugnęła, nic nie śmierdzi( na szczęści 😃 ) ani nic. Po prostu 0 reakcji :/

Wykorzystaj kod ode mnie i napisz wtedy czym prościej tym lepiej.Nie ma co tak tego komplikować.

Wykorzystaj kod ode mnie i napisz wtedy czym prościej tym lepiej.Nie ma co tak tego komplikować.

Twój kod oczywiście też wrzucałem. 0 reakcji ze strony układu

Weź miernik i zobacz jakie masz napięci za rezystorami (przed diodą)

Sprawdzam wszystko po kolei i widzę schemat diody RGB:

led_rgb.jpg

Tę najdłuższą podłączam do minusa a resztę do plusa nie? Bo już głupieje...

[ Dodano: 21-02-2012, 18:18 ]

Weź miernik i zobacz jakie masz napięci za rezystorami (przed diodą)

Nie zaopatrzyłem się w miernik :| Wiem, podstawa, ale niestety nie mam ;/

Na odwrót najdłuższa plus najkrótsza minus.

Ja dałbym opornik 300Ω za diodą bo 1K to zbyt dużo.

Przynajmniej u mnie tak działa.

  • Pomogłeś! 1
Na odwrót najdłuższa plus najkrótsza minus.

Ja dałbym opornik 300Ω za diodą bo 1K to zbyt dużo.

Przynajmniej u mnie tak działa.

O kurr...de, działa 😃 Świeci się na czerwono ;D DZIĘKI!!!

[ Dodano: 21-02-2012, 18:36 ]

Ale chwilka... mam tak:

1noga( krótka ) do masy

2( najdłuższa ), 3 i 4 przez rezystory podłączone do portów B 0, 1, 2. Świeci mi się tylko pod portem 1, na czerwono. Mam źle podłączone?

Podłączone dobrze tylko musisz zmieniać stany.Nie mam diody RGB żeby to sprawdzić ale na 3 osobnych diodach działa.

#define F_CPU 1000000L
#include <avr/io.h>
#include <util/delay.h>

#include <stdlib.h>
int main (void)
{
DDRD = 0xFF;
PORTB |= _BV(PB0);
_delay_ms(100);
PORTB ^= _BV(PB0);
PORTB |= _BV(PB1);
_delay_ms(100);
PORTB ^= _BV(PB1);
PORTB |= _BV(PB2);
_delay_ms(100);
PORTB ^= _BV(PB2);
}

Mam tak podłączone, chyba źle. Jeśli zamiast nóżki 1, podłączę nóżkę 2 lub 3 to pali się na niebiesko lub zielono. Może tylko ta najdłuższa nóżka jest plusem, a reszta to minusy?

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...