ThomasN
Guest
Sun Feb 18, 2007 11:08 am
witam
wczoraj przutowałem i pierwszy raz uruchomiłem atmege128 w obudowie tqfp64.
Z lutowaniem tak drobnego rastru miałem problem więc atmege przylutowałem
jak następuje: pocynowałem pola lutownicze, umieściłem atmege na miejscu i
powoli przejechałem grotem (temp. 270oC) po wszystkich nóżkach. Nie
dodawałem więcej cyny, bo sprawdziłem, że rezystancja między goldpinami a
pinami układu jest blika 0Ohm.
Bez problemu odczytuje i zapisuje fusy bits oraz odczytuje pamięć. Dziwne
jest, że co pare zapisów pokazuje się błąd weryfikacji przy 100% (chyba -
24), ale program jest w pamięci (pewnie dlatego, że krótki). (Używam
PonyProg2000)
Napisałem krótki program, który generuje 1kHz na wszystkich portach. I z tym
jest problem. Częstotliwość mierze multimetrem. I tu jest problem. Raz uda
się odczytać 1kHz na portach, a raz nie. Kilkakrotny reset czasami pomaga.
Raz udało mi się bezpośrednio na pinie odczytać prawidłową częstotliwość, a
na odpowiednim goldpinie nie. A czasami nawet na pinach pokazuje 0Hz.
Czy sposób polutowania układu jest źródłem problemów?
lwh
Guest
Sun Feb 18, 2007 12:13 pm
Użytkownik "ThomasN" <jakis.adres@serwer.jakis.pl> napisał w wiadomości
news:er98jq$h3t$1@inews.gazeta.pl...
Quote:
Czy sposób polutowania układu jest źródłem problemów?
Tak i nie
Jak przewodzą łapki i nie ma zwarć, to jeszcze mogłeś go przegrzać, albo
masz "brudną" płytkę (ze zwierającymi łapki paprochami).
Jednak stawiam na błędny program, skoro czasami działa.
ThomasN
Guest
Sun Feb 18, 2007 2:24 pm
Quote:
Jednak stawiam na błędny program, skoro czasami działa.
Program jest zbyt prosty na błędy, ale może czegoś nie widze. Później w asm
napisze dla pewności. Oto kod:
#define F_CPU 16000000UL
#include <avr/interrupt.h>
#include <avr/io.h>
#define nop() asm volatile ("nop")
unsigned int V;
ISR(TIMER1_COMPA_vect)
{
if (V == 0)
{
PORTA = 0b10101010;
PORTB = 0b10101010;
PORTC = 0b10101010;
PORTD = 0b10101010;
PORTE = 0b10101010;
PORTF = 0b10101010;
PORTG = 0b10101010;
}
else
{
PORTA = 0b01010101;
PORTB = 0b01010101;
PORTC = 0b01010101;
PORTD = 0b01010101;
PORTE = 0b01010101;
PORTF = 0b01010101;
PORTG = 0b01010101;
}
V = !V;
}
int main(void)
{
DDRA = 0xFF; PORTA = 0xFF;
DDRB = 0xFF; PORTB = 0xFF;
DDRC = 0xFF; PORTC = 0xFF;
DDRD = 0xFF; PORTD = 0xFF;
DDRE = 0xFF; PORTE = 0xFF;
DDRF = 0xFF; PORTF = 0xFF;
DDRG = 0xFF; PORTG = 0xFF;
V = 0x0;
OCR1AH = (unsigned char)((F_CPU/(2*1UL*1000)-1)>>

;
OCR1AL = (unsigned char)(F_CPU/(2*1UL*1000)-1);
TIMSK = 1<<OCIE1A;
TCCR1A = (0<<WGM11)|(0<<WGM10);
TCCR1B = (0<<WGM13)|(1<<WGM12)|(0<<CS12)|(0<<CS11)|(1<<CS10);
sei();
for(;
{ nop(); }
}
ThomasN
Guest
Sun Feb 18, 2007 2:26 pm
Quote:
Tak i nie
Jak przewodzą łapki i nie ma zwarć, to jeszcze mogłeś go przegrzać, albo
masz "brudną" płytkę (ze zwierającymi łapki paprochami).
Jeszcze jedno. Jak usunąc te zwarcia poprzez paprochy, których nie widze.
Greg(G.Kasprowicz)
Guest
Sun Feb 18, 2007 2:31 pm
Quote:
Napisałem krótki program, który generuje 1kHz na wszystkich portach. I z
tym jest problem. Częstotliwość mierze multimetrem. I tu jest problem. Raz
uda się odczytać 1kHz na portach, a raz nie. Kilkakrotny reset czasami
pomaga.
Raz udało mi się bezpośrednio na pinie odczytać prawidłową częstotliwość,
a na odpowiednim goldpinie nie. A czasami nawet na pinach pokazuje 0Hz.
Czy sposób polutowania układu jest źródłem problemów?
polutowania takze, a jestes pewine polaczen?
sa kondensatory blokujace?
solidna masa?
wszystkie VCC i GND polaczone odpowiednio razem?
ThomasN
Guest
Sun Feb 18, 2007 6:47 pm
Quote:
Czy sposób polutowania układu jest źródłem problemów?
polutowania takze, a jestes pewine polaczen?
Przejścia są - sprawdzałem multimetrem.
Quote:
sa kondensatory blokujace?
Aż trzy - przy każdym vcc i avcc.
Quote:
solidna masa?
prawie cała bottom layer to masa - tylko 6 innych ścieżek i vcc.
Quote:
wszystkie VCC i GND polaczone odpowiednio razem?
Na każdym pinie atmegi vcc i gnd jest odpowiednie napięcie.
Teraz jest jeszcze gorzej. Atmega chodzi tylko na wewnętrznym oscylatorze.
Za każdym razem jak przełącze na zewnętrzny kwarc tracę połączenie z układem
i muszę podłączyć zewnętrzny sygnał zegarowy. Wypróbowałem dwa inne kwarce,
ale efekt ten sam.
Grzegorz Kurczyk
Guest
Mon Feb 19, 2007 8:17 am
Użytkownik ThomasN napisał:
Quote:
Teraz jest jeszcze gorzej. Atmega chodzi tylko na wewnętrznym
oscylatorze. Za każdym razem jak przełącze na zewnętrzny kwarc tracę
połączenie z układem i muszę podłączyć zewnętrzny sygnał zegarowy.
Wypróbowałem dwa inne kwarce, ale efekt ten sam.
Spróbuj ustawić bit CKOPT. Często miałem przypadki, że bez ustawienia
tego bitu kwarc się nie wzbudzał albo chodził na jakiejś dziwacznej
czastocie.
Pozdrawiam
Grzegorz
ThomasN
Guest
Mon Feb 19, 2007 8:50 am
Quote:
Spróbuj ustawić bit CKOPT. Często miałem przypadki, że bez ustawienia
tego bitu kwarc się nie wzbudzał albo chodził na jakiejś dziwacznej
czastocie.
ten bit chyba koniecznie trzeba ustawić dla kwarców powyżej 8MHz. Dodałem
więcej cyny na nóżki XTAL i pomogło - przynajmniej narazie. Udało się
poprawnie ze wszystkich portów odczytać też generowaną częstotliwość 1kHz.
Po polutowaniu układu i pierwszych testach przyciąłem laminat nożyczkami do
prawidłowych wymiarów. Może połączenia lutowane tego za bardzo nie lubią?
pawel
Guest
Mon Feb 19, 2007 6:41 pm
Quote:
ten bit chyba koniecznie trzeba ustawić dla kwarców powyżej 8MHz. Dodałem
więcej cyny na nóżki XTAL i pomogło - przynajmniej narazie. Udało się
poprawnie ze wszystkich portów odczytać też generowaną częstotliwość 1kHz.
Czasem też pomaga przylutowanie obudowy kwarca do masy.
Sprawdź też czy aby na pewno masz prawidłowo wlutowane kondensatorki
przyłączone do kwarca.
Paweł
ThomasN
Guest
Mon Feb 19, 2007 11:05 pm
Quote:
ten bit chyba koniecznie trzeba ustawić dla kwarców powyżej 8MHz. Dodałem
więcej cyny na nóżki XTAL i pomogło - przynajmniej narazie. Udało się
poprawnie ze wszystkich portów odczytać też generowaną częstotliwość
1kHz.
Czasem też pomaga przylutowanie obudowy kwarca do masy.
Sprawdź też czy aby na pewno masz prawidłowo wlutowane kondensatorki
przyłączone do kwarca.
Paweł
Niestety mój multimetr mierzy poprawnie dopiero od nF i bez podłączonej
pojemności pokazuje około 80pF. Gdy mierze te 22pF to pokazuje 100pF, czyli
o te 20pF wzrasta wskazanie. Jednek gdy wlutowałem atmege zaczał pokazywać
nieskończoną pojemność (czyli powyżej mF, ale rezystancja jest powyżej
MOhm), ale to pewnie przez atmege.