İçindekiler:

AVR Mikrodenetleyici Sigorta Bitleri Yapılandırması. Mikrodenetleyicinin Flash Belleğinde LED Yanıp Sönen Programın Oluşturulması ve Yüklenmesi: 5 Adım
AVR Mikrodenetleyici Sigorta Bitleri Yapılandırması. Mikrodenetleyicinin Flash Belleğinde LED Yanıp Sönen Programın Oluşturulması ve Yüklenmesi: 5 Adım

Video: AVR Mikrodenetleyici Sigorta Bitleri Yapılandırması. Mikrodenetleyicinin Flash Belleğinde LED Yanıp Sönen Programın Oluşturulması ve Yüklenmesi: 5 Adım

Video: AVR Mikrodenetleyici Sigorta Bitleri Yapılandırması. Mikrodenetleyicinin Flash Belleğinde LED Yanıp Sönen Programın Oluşturulması ve Yüklenmesi: 5 Adım
Video: Jeneratör AVR Mikrodenetleyici | Stabilite Frekans Voltaj | İkaz Gerilimi 2024, Haziran
Anonim
Image
Image

Bu durumda C kodunda basit bir program oluşturup mikrodenetleyicinin hafızasına yazacağız. Entegre geliştirme platformu olarak Atmel Studio'yu kullanarak kendi programımızı yazacağız ve hex dosyasını derleyeceğiz. Kendi programlayıcımız ve AVRDUDE yazılımımızı kullanarak sigorta bitlerini yapılandıracağız ve hex dosyasını AVR ATMega328P mikro denetleyicisinin belleğine yükleyeceğiz.

AVRDUDE - Atmel'in AVR mikro denetleyicilerinin çip üzerindeki belleklerini indirmek ve yüklemek için bir programdır. Flash ve EEPROM'u programlayabilir ve seri programlama protokolünün desteklediği yerlerde sigorta ve kilit bitlerini programlayabilir.

Adım 1: Atmel Studio Kullanarak Program Yazma ve Hex Dosyasını Derleme

Atmel Studio Kullanarak Program Yazma ve Hex Dosyasını Derleme
Atmel Studio Kullanarak Program Yazma ve Hex Dosyasını Derleme
Atmel Studio Kullanarak Program Yazma ve Hex Dosyasını Derleme
Atmel Studio Kullanarak Program Yazma ve Hex Dosyasını Derleme

Atmel Studio'nuz yoksa indirip kurmalısınız:

Bu proje C'yi kullanacaktır, bu nedenle tam anlamıyla yürütülebilir bir proje oluşturmak için şablon listesinden GCC C Yürütülebilir Proje seçeneğini seçin.

Ardından, projenin hangi cihaz için geliştirileceğinin belirtilmesi gerekiyor. Bu proje AVR ATMega328P mikrodenetleyici için geliştirilecektir.

Atmel Studio'nun Ana Kaynak Düzenleyici alanına programın kodunu yazın. Ana Kaynak Düzenleyici – Bu pencere, mevcut projedeki kaynak dosyaların ana düzenleyicisidir. Editör, yazım denetimi ve otomatik tamamlama özelliklerine sahiptir.

1. Derleyiciye, gecikmeleri doğru hesaplayabilmesi için çipimizin hangi hızda çalıştığını söylemeliyiz.

#ifndef F_CPU

#define F_CPU 16000000UL // denetleyici kristal frekansını söylüyor (16 MHz AVR ATMega328P) #endif

2. Genel değişkenleri ve işlevleri tanımlayan diğer dosyalardan dahil etme bilgilerimizi koyduğumuz önsözü dahil ediyoruz.

#include // pinler üzerinde veri akışı kontrolünü etkinleştirmek için üstbilgi. Pinleri, portları vb. tanımlar.

#include // programda gecikme fonksiyonunu etkinleştirmek için başlık

3. Önsözden sonra main() işlevi gelir.

int ana(boşluk) {

main() işlevi benzersizdir ve diğer tüm işlevlerden farklıdır. Her C programının tam olarak bir main() işlevi olmalıdır. Main(), güç ilk açıldığında AVR'nin kodunuzu yürütmeye başladığı yerdir, yani programın giriş noktasıdır.

4. PORTB'nin 0 pinini çıkış olarak ayarlayın.

DDRB=0b00000001; // PORTB1'i çıktı olarak ayarla

Bunu Data Direction Register B'ye bir ikili sayı yazarak yapıyoruz. Data Direction Register B, register B'nin bitlerini giriş veya çıkış yapmamızı sağlar. 1 yazmak onları çıktı yapar, 0 ise girdi yapar. Çıkış görevi görmesi için bir LED taktığımız için, PORT B'nin 0 pinini çıkış olarak yapan bir ikili sayı yazıyoruz.

5. Döngü.

süre (1) {

Bu ifade, genellikle ana döngü veya olay döngüsü olarak adlandırılan bir döngüdür. Bu kod her zaman doğrudur; bu nedenle, sonsuz bir döngüde tekrar tekrar yürütülür. Asla durmaz. Bu nedenle, mikrodenetleyiciden güç kapatılmadığı veya kod program belleğinden silinmediği sürece LED sonsuza kadar yanıp sönecektir.

6. PB0 bağlantı noktasına bağlı LED'i açın

PORTB= 0b00000001; // PB0 bağlantı noktasına bağlı LED'i açar

Bu satır, PortB'nin PB0'ına 1 verir. PORTB, AVR çipinde soldan sağa giden 8 pin, PB7-PB0 içeren bir donanım kaydıdır. Sona 1 koymak, PB0'a 1 verir; bu, PB0'ı yüksek ayarlar ve bu da onu açar. Bu nedenle, PB0 pinine bağlı LED yanacak ve yanacaktır.

7. Gecikme

_delay_ms(1000); // 1 saniyelik bir gecikme yaratır

Bu ifade 1 saniyelik bir gecikme yaratır, böylece LED döner ve tam olarak 1 saniye açık kalır.

8. PB0 dahil tüm B pinlerini kapatın

PORTB= 0b00000000; //PB0 dahil tüm B pinlerini kapatır

Bu hat 8 Port B pininin hepsini kapatır, böylece PB0 bile kapalı olur, böylece LED söner.

9. Başka bir gecikme

_delay_ms(1000); // 1 saniyelik bir gecikme daha yaratır

Tam olarak 1 saniyeliğine kapanır, tekrar döngüye başlar ve tekrar açan çizgiyle karşılaşır, işlemi baştan sona tekrarlar. Bu, LED'in sürekli olarak yanıp sönmesi için sonsuz olarak gerçekleşir.

10. İade beyanı

}

dönüş (0); //bu satıra asla ulaşılmaz }

Kodumuzun son satırı bir return(0) ifadesidir. Bu kod hiç çalıştırılmasa da, sonu gelmeyen sonsuz bir döngü olduğundan, masaüstü bilgisayarlarda çalışan programlarımız için işletim sisteminin doğru çalışıp çalışmadığını bilmesi önemlidir. Bu nedenle derleyicimiz GCC, her main() öğesinin bir dönüş koduyla bitmesini ister. Herhangi bir destekleyici işletim sisteminden bağımsız çalışan AVR kodu için dönüş kodlarına gerek yoktur; bununla birlikte, main'i return() ile bitirmezseniz derleyici bir uyarı verir.

Son adım, projenin inşasıdır. Yürütülebilir dosya (.hex) dosyasını oluşturmak için tüm nesne dosyalarını derlemek ve son olarak bağlamak anlamına gelir. Bu hex dosyası, Proje klasörünün içindeki Debug klasörü içinde oluşturulur. Bu hex dosyası mikrodenetleyici çipine yüklenmeye hazırdır.

Adım 2: Mikro Denetleyici Sigorta Bitlerinin Varsayılan Yapılandırmasını Değiştirme

Mikro Denetleyici Sigorta Bitlerinin Varsayılan Yapılandırmasını Değiştirme
Mikro Denetleyici Sigorta Bitlerinin Varsayılan Yapılandırmasını Değiştirme
Mikro Denetleyici Sigorta Bitlerinin Varsayılan Yapılandırmasını Değiştirme
Mikro Denetleyici Sigorta Bitlerinin Varsayılan Yapılandırmasını Değiştirme
Mikro Denetleyici Sigorta Bitlerinin Varsayılan Yapılandırmasını Değiştirme
Mikro Denetleyici Sigorta Bitlerinin Varsayılan Yapılandırmasını Değiştirme

Bazı sigorta uçlarının çipin belirli yönlerini kilitlemek için kullanılabileceğini ve potansiyel olarak onu bloke edebileceğini (onu kullanılamaz hale getirebileceğini) hatırlamak önemlidir

ATmega328P'de kullanılan toplam 19 sigorta biti vardır ve bunlar üç farklı sigorta baytına ayrılmıştır. Sigorta bitlerinden üçü "Genişletilmiş Sigorta Baytında", sekizi "Sigorta Yüksek Baytında" ve sekizi daha "Sigorta Düşük Baytında" bulunur. Kilit bitlerini programlamak için kullanılan dördüncü bir bayt da vardır.

Her bayt 8 bittir ve her bit ayrı bir ayar veya bayraktır. Ayar değil, programlanmış, programlanmamış sigortalardan bahsettiğimizde aslında ikili kullanıyoruz. 1 ayarlanmadı, programlanmadı ve sıfır ayarlandı, programlandı anlamına gelir. Sigortaları programlarken ikili gösterim veya daha yaygın olarak onaltılık gösterim kullanabilirsiniz.

ATmega 328P yongaları, 8 MHz frekansına sahip yerleşik bir RC osilatörüne sahiptir. Yeni çipler, saat kaynağı olarak bu setle ve CKDIV8 sigortası aktif olarak gönderilir ve 1 MHz sistem saatiyle sonuçlanır. Başlangıç zamanı maksimuma ayarlanır ve zaman aşımı süresi etkinleştirilir.

Yeni ATMega 328P yongaları genellikle aşağıdaki sigorta ayarlarına sahiptir:

Düşük sigorta = 0x62 (0b01100010)

Yüksek sigorta = 0xD9 (0b11011001)

Genişletilmiş sigorta = 0xFF (0b111111111)

ATmega 328 çipini harici bir 16MHz kristal ile kullanacağız. Bu nedenle, "Fuse Low Byte" bitlerini buna göre programlamamız gerekiyor.

1. Bit 3-0 osilatör seçimini kontrol eder ve 0010'un varsayılan ayarı, istemediğimiz, kalibre edilmiş dahili RC osilatörünü kullanmaktır. 8.0 ila 16.0 MHz arasında düşük güçlü kristal osilatör çalışmasını istiyoruz, bu nedenle bit 3-1 (CKSEL[3:1]) 111'e ayarlanmalıdır.

2. Bit 5 ve 4, başlatma süresini kontrol eder ve 10'luk varsayılan ayar, güç kapatma ve güç tasarrufundan itibaren altı saat çevrimi başlatma gecikmesi, artı 14 saat çevrimi artı sıfırlamadan itibaren 65 milisaniyelik ek başlatma gecikmesi içindir.

Düşük güçlü bir kristal osilatör için güvenli tarafta olmak için, kapatma ve güç tasarrufundan mümkün olan maksimum 16.000 saat döngüsü gecikmesini istiyoruz, bu nedenle SUT[1] 1'e ayarlanmalı ve ek bir başlatma gecikmesi olmalıdır. 14 saat döngüsü artı sıfırlamadan 65 milisaniye, bu nedenle SUT[0] 1'e ayarlanmalıdır. Ayrıca, CKSEL[0] 1'e ayarlanmalıdır.

3. Bit 6, bizim umurumuzda olmayan PORTB0'a saat çıkışını kontrol eder. Böylece, bit 6, 1 olarak bırakılabilir.

4. Bit 7, 8'e bölme işlemini kontrol eder ve varsayılan 0 ayarı, istemediğimiz özelliği etkinleştirmiştir. Bu nedenle, bit 7'nin 0'dan 1'e değiştirilmesi gerekiyor.

Bu nedenle, yeni Sigorta Düşük Bayt, onaltılık gösterimde 0xFF olan 11111111 olmalıdır

"Fuse Low Byte" bitlerini programlamak için programlayıcımızı (https://www.instructables.com/id/ISP-Programmer-fo…) ve AVRDUDE yazılımını kullanabiliriz. AVRDUDE, Atmel mikro denetleyicilerinden indirmek ve yüklemek için kullanılan bir komut satırı yardımcı programıdır.

AVRDUDE'u indirin:

Öncelikle, programcımızı AVRDUDE'nin yapılandırma dosyasına tanımlamalıyız. Windows'ta yapılandırma dosyası genellikle AVRDUDE'nin yürütülebilir dosyasıyla aynı konumdadır.

Metni avrdude.conf yapılandırma dosyasına yapıştırın:

# ISPProgv1

programcı kimliği = " ISPProgv1"; desc = "seri port çarpıyor, reset=dtr sck=rts mosi=txd miso=cts"; type = "serb"; bağlantı_tipi = seri; sıfırla = 4; sck = 7; mosi = 3; miso = 8;;

AVRDUDE'yi başlatmadan önce, şemaya göre mikrodenetleyiciyi programlayıcıya bağlamalıyız

DOS komut penceresini açın.

1. avrdude'un desteklendiği programcıların listesini görüntülemek için komut avrdude -c c yazın. Her şey yolundaysa, listenin programcı kimliği "ISPProgv1" olmalıdır.

2. Avrdude'un desteklendiği Atmel cihazlarının listesini görüntülemek için avrdude -c ISPProgv1 komutunu yazın. Liste, Atmel ATMega 328P için m328p cihazına sahip olmalıdır.

Ardından, avrdude -c ISPProgv1 –p m328p yazın, komut avrdude'a hangi programlayıcının kullanıldığını ve hangi Atmel mikro denetleyicisinin bağlı olduğunu söyler. ATmega328P imzasını onaltılık gösterimde sunar: 0x1e950f. Şu anda ATmega328P'de bulunan sigorta biti programlamasını ayrıca onaltılık gösterimde sunar; bu durumda, sigorta baytları fabrika varsayılanına göre programlanır.

Ardından avrdude -c ISPProgv1 –p m328p –U lfuse:w:0xFF:m yazın, avrdude'a hangi programlayıcının kullanıldığını ve hangi Atmel mikrodenetleyicisinin bağlı olduğunu söyleyen ve Fuse Low Byte'ı 0xFF olarak değiştiren bir komuttur.

Şimdi saat sinyali düşük güçlü kristal osilatörden gelmelidir.

Adım 3: Programı ATMega328P Mikrodenetleyicinin Belleğine Yazmak

Programı ATMega328P Mikrodenetleyicinin Belleğine Yazmak
Programı ATMega328P Mikrodenetleyicinin Belleğine Yazmak
Programı ATMega328P Mikrodenetleyicinin Belleğine Yazmak
Programı ATMega328P Mikrodenetleyicinin Belleğine Yazmak

İlk olarak talimatın başında yaptığımız programın hex dosyasını AVRDUDE dizinine kopyalayın.

Ardından, DOS komut penceresine avrdude –c ISPProgv1 –p m328p –u –U flash:w:[hex dosyanızın adı] komutunu yazın.

Komut, mikrodenetleyicinin belleğine hex dosyası yazar. Artık mikrodenetleyici programımızın talimatlarına göre çalışmaktadır. Hadi kontrol edelim!

Adım 4: Mikrodenetleyicinin Programımızın Talimatlarına Göre Çalıştığını Kontrol Edin

Mikrodenetleyicinin Programımızın Talimatlarına Göre Çalıştığını Kontrol Edin
Mikrodenetleyicinin Programımızın Talimatlarına Göre Çalıştığını Kontrol Edin
Mikrodenetleyicinin Programımızın Talimatlarına Göre Çalıştığını Kontrol Edin
Mikrodenetleyicinin Programımızın Talimatlarına Göre Çalıştığını Kontrol Edin
Mikrodenetleyicinin Programımızın Talimatlarına Göre Çalıştığını Kontrol Edin
Mikrodenetleyicinin Programımızın Talimatlarına Göre Çalıştığını Kontrol Edin

AVR Yanıp Sönen LED Devresinin şematik diyagramına göre bileşenleri bağlayın

İlk olarak, tüm AVR devrelerinde olduğu gibi güce ihtiyacımız var. AVR çipinin çalışması için yaklaşık 5 volt güç yeterlidir. Bunu pillerden veya bir DC güç kaynağından alabilirsiniz. +5V gücü pin 7'ye, pin 8'i de breadboard üzerinde toprağa bağlarız. AVR çipinin düzgün bir güç hattı elde etmesi için güç kaynağının gücünü yumuşatmak için her iki pimin arasına 0.1μF seramik kapasitör yerleştiriyoruz.

Cihaza Güç Açık Sıfırlama (POR) sağlamak için 10KΩ direnç kullanılır. Güç AÇIK konuma getirildiğinde, kapasitör üzerindeki voltaj sıfır olacak ve böylece cihaz sıfırlanacak (resetleme aktif düşük olduğundan), ardından kapasitör VCC'ye şarj olacak ve sıfırlama devre dışı bırakılacaktır.

LED'imizin anotunu AVR pin PB0'a bağlıyoruz. Bu, ATMega328P'nin 14 numaralı pinidir. Bir LED olduğu için, LED'e akan akımı, yanmaması için sınırlamak istiyoruz. Bu nedenle LED'e seri olarak 330Ω direnç yerleştiriyoruz. LED'in katodu toprağa bağlanır.

Atmega328 mikrodenetleyici için saat sağlamak için 16 MHz kristal ve kristalin çalışmasını stabilize etmek için 22pF kapasitörler kullanılır.

Bunlar, LED'i yakmak için gerekli olan tüm bağlantılar. Güç kaynağı.

Tamam. LED bir saniye gecikmeyle yanıp sönüyor. Mikrodenetleyicinin çalışması görevlerimize karşılık gelir

Adım 5: Sonuç

Kuşkusuz, bu sadece bir LED'i yakmak için uzun bir süreçti, ancak gerçek şu ki, büyük engelleri başarıyla aştınız: bir AVR mikro denetleyicisini programlamak için bir donanım platformu oluşturmak, Atmel Studio'yu entegre geliştirme platformu olarak kullanmak, AVRDUDE'yi yazılım olarak kullanmak. bir AVR mikro denetleyicisinin yapılandırılması ve programlanması

Temel mikrodenetleyici projelerimden haberdar olmak istiyorsanız, YouTube'uma abone olun! Videolarımı izlemek ve paylaşmak yaptıklarımı desteklemenin bir yolu

YouTube FOG kanalına abone olun

Önerilen: