STM32F407 Cortex M4 şamataları

Başlatan bunalmis, 16 Ekim 2011, 17:14:50

GreeN

Tüm pinlerde analog giriş işlemi yapılabiliyor mu? Yoksa piclerde olduğu gibi sadece bazı pinler mi bu iş için tahsis edilmiş? Her ADC'nin (adc1 , adc2 , adc3) kendine has pinleri mevcut.

MODER registerlarındaki ilgili pinler "11: Analog mode" değerine set edildiğinde ADC işlevini gerçekleştiriyorsa, bu tüm pinlerin ADC için kullanılabileceğini mi belirtiyor ?
Tüm pinler için analog ayarlayabileceğini sanmıyorum. http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/DM00037051.pdf s.43 teki tabloda hangi pin ne fonksiyonu var yazıyor.

injected ve regular adc ler var. Tam olarak bende kavrayamadım ama injected özel uygulamalar için bir çözüm olabiliyormuş. Regularde bir çevrim bitmeden ikinci çevrime başlayamazken (bir adcx için) injected de ise bir adc ye ait kanal sampling süresi ardından daha convertion bitmeden aynı adc ile farklı bir kanaldan 2. çevrime başlayabiliniyor sanırım.
Terörü Lanetliyoruz.

NecroCapo

Mesela o tablodaki "Alternate Functions" sütunundaki ADC123_IN0 yazan pin, ADC1 ADC2 ve ADC3 için 0.Input anlamında mı oluyor? _IN kısmını hep external interrupt olarak düşünmüştüm.
Bu durumda ADC girişi için MODER'den "11: Analog mode" yerine "10: Alternate function mode" mu seçmemiz gerekiyor ?

Bir de ADC1_SQR3 yerine ne yazmamız gerekiyor o zaman?

pcb

128x64 grafik lcd driver ı var mı arkadaşlar  ?
adc ve diğer denemelerde ekran çok lazım oluyor.

GreeN

Alıntı yapılan: pcb - 19 Ocak 2012, 14:37:41
128x64 grafik lcd driver ı var mı arkadaşlar  ?
adc ve diğer denemelerde ekran çok lazım oluyor.

lcd çözümü için ben şu yolu kullandım ;

https://www.picproje.org/index.php/topic,37143.0.html
Terörü Lanetliyoruz.

-Hasan-


mcan

Alıntı yapılan: uicroarm - 19 Ocak 2012, 09:51:25
Dizide index boyutunu yazıyor musun? Mesela aşağıdaki gibi. Kullandığın işlemcinin hafızası kadar sınırın varsa okadar denebilir veya tanımlayabilecek variable kadar. Fakat programın büyüktür ve global değişkenlerin çoktur bunları hafıza sayısından düşmen gerekir ve tabii ektradan derleyicininde yaz boz yapacağı ram kadar bırakman gerekir yoksa arm'ı pic gibi hafızadan hafızaya data taşımak zorunda bırakırsın.
(piclerde bank işlemi)

char MyArray[20000];


Merhaba hocam kullandığım işlemci stm32f103 512kb rom ve  64 kb ram var 64 pinli. Programda yazdığım bir fonksiyon içerisinde dizi tanımlıyorum şu şekilde ;

void fonksiyon (void)
{
char dbuffer[65537];

dbuffer[65535]=1;
}

Main fonksiyonu içerisinden de bu fonksiyonu çağırıyorum,ancak derleme esnasında hiçbir hata almamama rağmen program fonksiyon çağırılıncaya kadar çalışıp sonrasında duruyor. Eğer tanımlarken bin katı kadar tanımlama yaparsam ( char dbuffer[65537000] ) aşşağıdaki hatayı alıyorum.
Bana göre olması gereken 65536 sayısında bile hata vermesi gerekirdi.Acaba değişkeni ram üzerine değilde rom üzerine mi tanımlıyor?


sd_spi_stm32.c: Error: C3048U: out of store while compiling with -g. Allocation size was 131076096, system size is 1740855276

pcb

Alıntı yapılan: GreeN - 19 Ocak 2012, 14:42:52
lcd çözümü için ben şu yolu kullandım ;

https://www.picproje.org/index.php/topic,37143.0.html


pcb yi basıp ekranı çalıştırabildiniz mi ? yoksa hiç 128x64 lcd ile uğraşmayalım mı?

Klein

Alıntı yapılan: NecroCapo - 19 Ocak 2012, 14:29:22
Mesela o tablodaki "Alternate Functions" sütunundaki ADC123_IN0 yazan pin, ADC1 ADC2 ve ADC3 için 0.Input anlamında mı oluyor? _IN kısmını hep external interrupt olarak düşünmüştüm.
Bu durumda ADC girişi için MODER'den "11: Analog mode" yerine "10: Alternate function mode" mu seçmemiz gerekiyor ?

Bir de ADC1_SQR3 yerine ne yazmamız gerekiyor o zaman?
Hayır alternatif mod seçmeyeceksin. Analog seçeceksin.
PORTC0 kullanacağına göre kanal numaran 10. 
ADC kısmını tam okumadım daha. Bu yüzden sequence registeri tam olarak ne yapıyor bilmiyorum. Tahminen, birden fazla kanalın varsa kanalların çevrime girme sıralamasını kullanıcının ayarlamasını sağlıyor. Eğer böyle ise , birinci çevrimde senin kanalını sıraya alması için
ilk 5 bit (SQ1) değerin kanal numaran 10 olduğu için 0xA olmalı. ( bu sadece tahmine dayalı bir yorum.)

NecroCapo

Alıntı YapHayır alternatif mod seçmeyeceksin. Analog seçeceksin.
PORTC0 kullanacağına göre kanal numaran 10. 
ADC kısmını tam okumadım daha. Bu yüzden sequence registeri tam olarak ne yapıyor bilmiyorum. Tahminen, birden fazla kanalın varsa kanalların çevrime girme sıralamasını kullanıcının ayarlamasını sağlıyor. Eğer böyle ise , birinci çevrimde senin kanalını sıraya alması için
ilk 5 bit (SQ1) değerin kanal numaran 10 olduğu için 0xA olmalı. ( bu sadece tahmine dayalı bir yorum.)

Teşekkürler çok açıklayıcı oldu. Aynen dediğiniz gibi, çevrime girme sıralaması için kullanılıyor. Fakat PORTC0'ın kanal numarasının 10 olduğunu nereden buldunuz ?

-Hasan-

Peki arkadaşlar kartı nasıl kullanıyorsunuz? bir alt kart yaptınız mı?

CLR

@mcan

ben deneyemedim,açıkçası ram kullanımına dikkat ettiğim için böyle karşılaşmadım tabii yanlışlıkla yazılabilir, az özce keilin forumuna baktım birkaç kişi max ram için tanımlama yapmış ve array tanımlarken array max ramden çok ise error direktifi ile compilera msj yazdırmışlar. Keil forumunda sorarsan daha kesin bir cevap alırsın.
Knowledge and Experience are Power

GreeN

Alıntı yapılan: pcb - 19 Ocak 2012, 14:55:40

pcb yi basıp ekranı çalıştırabildiniz mi ? yoksa hiç 128x64 lcd ile uğraşmayalım mı?

PCB yi hazırladım ama montaj için vakit bulamadım. Kısmetse haftasonuna...
Terörü Lanetliyoruz.

Klein

Alıntı yapılan: NecroCapo - 19 Ocak 2012, 15:48:39
Teşekkürler çok açıklayıcı oldu. Aynen dediğiniz gibi, çevrime girme sıralaması için kullanılıyor. Fakat PORTC0'ın kanal numarasının 10 olduğunu nereden buldunuz ?
Hard:43 den başlayan bir tablo var. Alternatif fonksiyonları gösteriyor. Alternatif fonksiyon demesi kafanızı karıştırmasın. Analogları da alternatif fonksiyon gibi değerlendirip , başka bir gurup olduğunu göstermek için de koyu harflerle yazmış. Oradan tüm ADC kanallarının hangi portlara bağlı olduğunu bulup bir tablo çıkardım.

ADC       Kanal     Port
1-2-3       IN0        A0
1-2-3       IN1        A1
1-2-3       IN2        A2
1-2-3       IN3        A3
1-2          IN4        A4
1-2          IN5        A5
1-2          IN6        A6
1-2          IN7        A7

1-2          IN8        B0
1-2          IN9        B1

1-2-3       IN10     C0
1-2-3       IN11     C1
1-2-3       IN12     C2
1-2-3       IN13     C3
1-2          IN14     C4
1-2          IN15     C5

NecroCapo

Klein hocam süpersiniz. Çok iyi oldu bu, şimdi taşlar yerine oturdu :)

-Hasan-

#809
Ben alt kart için bir plaket aldım onun üzerine aklıma geldikçe eklemeler yapacağım. Şimdilik aldıklarım bunlar:



Sizler nasıl yapıyorsunuz arkadaşlar? (sormuştum arada kaynadı gitti :D)