Atmega328 SeriPort ilginc hata...

Başlatan cagrisma, 29 Nisan 2012, 01:25:51

cagrisma

Merhaba arkadaşlar,

Atmega328 işlemcisi ile UART üzerinden haberleşmem lazım ama çok ilginc sorunum var.

Öncelikle ben atmega işlemcileri kodlamayı bilmiyorum. Elimde atmega328 var. Ama az da olsa Arduino programalamayı biliyorum. Zaten arduinoda atmega işlemciler kullanılıyor. Bende ordan denemek için basit bi kod çalıştırıyorum ama nedense hep sonuclar hatalı oluyor.

Derleyici Arduino 1.0
Derleyiciden Secilen Board Arduino Pro Mini 3.3V 8Mhz Atmega328 / 5V 8Mhz Atmega328 ( Malum iki volt degeri ilede calisabiliyor islemci)
Harici 8Mhz kristal takili
NOT: Arduinoda ilk setup sonrada loop fonksiyonları calisir

const int ledPin = 9;   // Pin numarasi (PB1 denk geliyor)
int incomingByte;         // okunacak degisken

void setup()
{
  Serial.begin(9600);        // Baund Rate 9600
  pinMode(ledPin, OUTPUT);   // led pini cikis modunda
}

void loop()
{
  if (Serial.available() > 0)     // klavyeden herhangibir karaktere basilirsa
  {
    incomingByte = Serial.read();      // basilan karakteri oku
    if (incomingByte == 'H')                    // gere baslican karater ASCII olarak H ise
           digitalWrite(ledPin, HIGH);       // 9 nolu pini yak
    if (incomingByte == 'L')                     // gere baslican karater ASCII olarak L ise
           digitalWrite(ledPin, LOW);         // 9 nolu pini sondur
    }
  }
}

Terminal prgrami ile portu inceledigimde hep ?? ?? ?? ?? ?? ?? ?? ?? (arkada arkaya bir suru soru isareti) sekilden veri geliyor.
Tabi benimde aklima ilk olarak baud rate sorunu var gibi geliyor ama yok, hepsini deniyor sonuc hep aynı.

Krista oalrak 8, 10, 20 olmak uzere uc farkli deneme yaptim.
Volt oalrak hem 5V ile hemde 3.3V ile deneme yaptim.
Ama sonuc hep aynı.

Bu konuda tecrubesi olan, yada daha once karsilasipta cozen varmi, yardimlariniz bekliyorum

cagrisma

Bu tarz bir sorun yaşaya olmadı sanırım  :o

bocek

programında herhangi bir sorun yok. çalışıyor.
benim kart, ev yapımı freeduino diye bir arduino türevi ve üzerinde bootloader olarak "[optiboot] duemilanove or nano with atmega328" yüklü. kristalim 16 Mhz.
ledPin olarak 13 veriyorum ve seri porttan 'H' gönderince led yanıyor 'L' gönderince sönüyor. tam senin istediğin gibi.

yalnız kristali söküp, 20 MHz takınca (seyyar benimkisi:) led tepki vermiyor.
demek ki 'baud rate hatası' problemin var galiba. yani bootloader olarak (mesela) 16 Mhz'ye göre derlenmiş program yüklü ama sen 8,10,20 Mhz takıyorsun. bu da baud rate'in 9600'den oldukça farklı bir değer almasına sebep oluyor. 16 Mhz takıp dene. 16 MHz kristalin yoksa bootloaderi 8,10 ya da 20'ye göre yeniden derleyip yüklemen gerekir. bunun için de tabii ekstra bir programlayıcı gerek.
kartının modelini, yüklü bootloaderini, usbasp veya benzeri bir avr programlayıcın olup olmadığını yaz daha detaylı yardımcı olalım.

1 ya da 0. işte 'bit'ün mesele..

cagrisma

anladim durumu

ama sunu sorsam bootloader olarak 16Mhz ayarlı demissiniz ama ben kart olarak 8Mhz verisyonu secinde kristal ayaralaı otamaik degimisyor mu?

diger yandan denemeleri usbasp uzerinden yapiyorum, yanimda arduino karti yok, ama derleyici olarak arduio 1.0 kullanıyorum.

iste bu noktada kristali nasil degitirebilirim

bocek

Seçtiğin kart ile ilgili ayarlar
..arduino-1.0\hardware\arduino\boards.txt
dosyasında tanımlıdır.

Dediğin gibi kart olarak 8 MHz'yi seçince 8 MHz'ye göre derleme yapılır.
Ancak ben doğru mu anlamışım?
Sende arduino kart yok, atmega328'li bir devren var ve bu devreye, arduino 1.0 IDE'sinde yazdığın programı usbasp ile atıyorsun.
peki senin devre seri porta nasıl bağlanıyor? FT232'li ayrı bir devren mi var?
1 ya da 0. işte 'bit'ün mesele..

cagrisma

#5
Evet aynen öyle

Elimde spurkfunin FT232 entegresi var, onun uzerinden pcye gonderiyorum.
Entegreden dolayı atgemayi 3.3V de calistiriyorum

Bugun tekrardan yeni bir 8Mhz yada 16Mhz ile tekrar deniycem.

Bu arada 3.3V ile calistirmadan kaynakalan bir sıkıntı olmaaz degilmi, 5V ile calistiridim zatende ondada aynıydı sonuc

bocek

3.3V'ta çalışması tabii ki etkiler. ama 5V'ta da denedim diyorsun o başka.

elinde madem ft232'li devre var, usbasp'ye ihtiyacın yok demektir.
m328'e uygun bootloader'i yüklersen (örn. duemilanove), direkt IDE'den program yükleyebilirsin.
IDE'den program yükleyebiliyorsan zaten baud rate hatası da yok demektir ve programın düzgün çalışır.
1 ya da 0. işte 'bit'ün mesele..

cagrisma

Sorun cözuldu , yardiminin icn tesekkurler  ;)

Hata:
USBasp ile programlama devresinde kristal ve kondansotor takilmasi gerekiyormus. Ben sadece reset, mosi, miso ve sck takiyordum ve elektrik veriyordum

bocek

güzel kardeşim sorunun çözülmesine sevindim de..
neden yarım yamalak bilgi verip uğraştırıyorsun anlamadım.
sen usbasp'nin bile çalıştığından emin değilsin orayı atlamışsın bizi arduino ile uğraştırıyorsun.
1 ya da 0. işte 'bit'ün mesele..

cagrisma

calisiyo be dostum calismazmi, iste o kristal ve kondasatorleri takmadigimda demekki kristalde sikinti oluryor baud rate hatasi geliyordu, yoksa onlar olmadanda sorunsuz programlayabiliyordum  ;)