урок 3 - ПРОЦЕСОР С регистър 74HC5

 урок 3 - ПРОЦЕСОР С регистър 74HC595

https://www.youtube.com/watch?v=SsYDZx7yjM4

урок 2 - преместващ регистър 74HC595

урок 2 с видео в тубата за начинаещи и напреднали със лека хакерска връзка в електронната схема на урока, да се види какво с случва вътре в регистъра и как това се показва на изходите. нещо като дебъгване на ттл схемата на този преместващ регистър удобен и полезен за работа:) чети внимателно, печелиш обезателно !!!

линк към клипа в тубата >>> https://www.youtube.com/watch?v=sAsDBkWMYrk

 

урок - преместващ регистър 74HC595

урок - преместващ регистър 74HC595 - https://www.youtube.com/watch?v=LLxcAz1l2rE <> бърз урок за шифт регистрите да са научите как са управляват първо със бутони после със софтуер за RASPBERRY PICO RPI2040 🙂 който иска да научи нещо, да гледа, който не да ходи, да копа картофи 🙂

 

 

 

 

 

микрочип училище с много видео и софтуер

микрочип училище с много видео и софтуер >>> link >>>> https://mu.microchip.com/




таймери в ПИК процесорите - урок 7

код за урока за таймерите в пик процесорите -

link here >>> http://karadev.net/basto/?dir=timer_pic1829

препоръчително използване на NOTEPAD++ с настройка за разпознаване на С/С++ код за да можете да видите различните регистри, променливи и другите особенности на езика за програмиране на пик процесорите.

симулацията е в програмата протеус, версия последна има я в нета, или си начертайте собствена схема според графиките в предните уроци. успех

========================= MAIN.C =============================

#include <xc.h>
//#include <pic16f1829.h>
#include "initcpu.h"
#include "main.h"
#include "fuse.h"
#include "timers.h"            // here is interrupt function
//#include "lcd.h"            // for later use in this project

void main(void)
{    init_cpu();
        //PORTB = 8;
    while(1)
    {    
    // increase Postscaler value 0<>15
    if(T2OUTPS_plus == 1)
        { __delay_ms(350); //delay for button
            T2CONbits.T2OUTPS++;
             // sum + 16 for start count from RB4
            PORTB = PORTB + 16; // indicator plus + 1
            if(T2CONbits.T2OUTPS == 0)
            { PORTB = 0;} // null indicator
        }
    
     // decrease Postscaler value 0<>15
    if(T2OUTPS_minus == 1)
        {__delay_ms(350);//delay for button
            T2CONbits.T2OUTPS--;
            PORTB--; // indicator minus - 1
            if(T2CONbits.T2OUTPS == 0)
            { PORTB = 0; } // null indicator
        }
    
    // increase Prescale value 0<>3
    if(T2CKPS_plus == 1)
        {__delay_ms(350);//delay for button
            T2CONbits.T2CKPS++;PORTA++;
            if(T2CONbits.T2CKPS == 0)
            {
            PORTA = 0;    
            }
        }
} // END WHILE


} // END MAIN

========================= TIMERS.C =============================
функцята която обработва прекъсвате е предварително дефининирана в ХС8 и трябва само да я извиката както е показано в кода по-долу. вътре във функцията нулирате флага на таймера и след това изпълнявате командите който ви трябват. колкото и софтуер да напишете в таймера честотата на който  и да използвате таймер няма да се промени. което е целта на задачата.

========================= TIMERS.C =============================

#include <xc.h>
#include "main.h"
#include "timers.h"

unsigned char flag_timerirq = 0;

void __interrupt() timer2(void)
{    PIR1bits.TMR2IF = 0;
    //======================
    // check on scope for frequency VARIANT 1
    //notused6 = 1; //PORTAbits.RA5
    //notused6 = 0; //PORTAbits.RA5
    //======================
    // check on scope for frequency VARIANT 2
    if(flag_timerirq == 0) // full period freq
            {                    // multypile by 2 for
            LATA5 = 1;        // real frequency
                flag_timerirq = 1;
            }
        else
            {    LATA5 = 0;
                flag_timerirq = 0;
            }


} // END OF INTERRUPT TIMER2

========================= INITSPU.C =============================

стартирането, инициализацията на таймера и настройката на делителите на таймера се правят във този файл. промяната на стойностите на делителите може да направите където и да е в софтуера, стига това да ви върши работа. четете внимателно пдф файловете кои регистри са само четене и кои може и да бъдат променяни ако се налага от смисъла на приложението.

========================= INITSPU.C =============================


#include <xc.h>
//#include <pic16f1829.h>
#include "main.h"

void init_cpu(void)
{
OSCCON = 0x72; // 4F - 1Mhz // 6A - 4Mhz
                // 0x72 - 8Mhz // 0x7A - 16Mhz
OPTION_REG = 0b10000000; // TIMER0 REG // pull up is DISABLE

CM1CON0 = 0b00000000;
CM1CON1 = 0b00000000;

CM2CON0 = 0b00000000;
CM2CON1 = 0b00000000;
                
ADCON0 = 0b00000000;
ADCON1 = 0b00000000;

CLKRCON = 0b00000000; // slew rate is OFF
MDCON = 0b00000000; // slew rate is OFF

ANSELA = 0b00000000;
TRISA  = 0b00001000; // /MCLR = 1 always
PORTA = 0x00;
WPUA = 0x00;

ANSELB = 0b00000000;
TRISB  = 0b00000000;
PORTB = 0x00;
WPUB = 0x00;

ANSELC = 0b00000000;
TRISC  = 0b00000111;
PORTC = 0x00;
WPUC = 0x00;

MDMSODIS = 1; // logic cell disables

GIE = 1 ; // enable general interrupts FOR ALL
PEIE = 1; // enable peripherial interrupts FOR ALL
TMR2IE = 1; // // enable TIMER2 interrupts
// set bits from pdf for timer prescaler and post scaller
T2CON = 0b00000000; // and timer2 on / off
T2CONbits.T2OUTPS = 0; //0-15 // Timerx Output Postscaler Select bits
T2CONbits.T2CKPS = 0; //0-3  // Timer2-type Clock Prescale Select bits
T2CONbits.TMR2ON = 1; // enable timer2 to start


}
========================= INITSPU.C =============================

екипът на карадев еоод предлага на ученици и студенти изработка на практическите части на курсови и дипломни работи.
поради зачестилия интерес от страна на ученици и студенти към нашите продукти решихме да публикуваме малко информация за всички учащи, които имат задание за изработка на електроника, софтуер и реална работеща система към всяка тяхна курсова или дипломна работа.
екипът ни предоставя всички чертежи, схеми и графики към суответното задание, като хартиената част остава за ученика или студента да си я направи сам.
заданието ще бъде разгледано, оценено като стойност. ще се сметне цена за изпълнението до 4 броя от всяка платка и пълен комплект електроника към тях. монтажът на електронните елементи може да бъде от наша страна или ако ученика или студента искат могат и те да си налепят платките.
софтуера ще бъде написан спрямо схемното решение на  заданието, като целият сорс код и готови компилирани файлове се предават на ученика или студента във формата на архивиран /*.rar/ файл след заплащане на поръчката.
допълнителни обяснения по софтуера и хардуерната част са напълно възможни. всеки ученик или студент може допълнително да изиска разяснение на софтуера/сорс код/ към неговият проект.
за повече информация или поръчки : This email address is being protected from spambots. You need JavaScript enabled to view it.
тел :0887 28 49 01

   

https://www.programiram.com/home

   

уроци, задачи, информация и много други :)
линк >> натисни тук <<<

   

1001 задачи в програмирането
линк >>
натисни тук <<<

   
НАУЧИ МЕ много добър сайт
линк >>
натисни тук <<<
   

Много добра книга с примери за програмирането на езика С от автора Стенли Липман.

Може да си я разпечатате като учебник.

Има примери към всяка функция, цикъл и задача.
линк към фйла >>>
www.karadev.net/uroci/pdf_basic/CPP-Primer-BG.pdf

   

показаните графики са тест на процесор, към който на аналогов вход са подадени импулси от синусуида от 0 до +5V волта. на първата графика са показани входящите и изходящите сигнали без промяна, като софтуера е настроен да копира сигнала 1:1. разликата е само че на входа нивото във волтове е до +1V волт, докато на изхода е до +5V волта. използвани са и двата изхода на DAC модула на процесора за да се види как ще действа и резисторния делител на напражение. нивата на изходните напрежения могат да се настройват във всякакви стойности и софтуерно. тук  сме използвали хардуерен делител.


 
 

на втората графика е показана същата графика само че със инвертиране на изходния сигнал. това означава че когато на входа сигнала е най-ниско /0 волта/ на изхода е най-високо  / +5 волта/ и обратно.



 

на третата графика е показана същата графика само че нивата на волтовете са еднакви и изхода е със инвертиране на сигнала. това означава че когато на входа сигнала е най-ниско /0 волта/ на изхода е най-високо  / +5 волта/ и обратно.




 
 

на четвъртата графика е показана същата графика със инвертиране на изходния сигнал. това означава че когато на входа сигнала е най-ниско /0 волта/ на изхода е най-високо  / +5 волта/ и обратно. добавен е софтуер който прави вдигане на напрежението на изхода в максимална стойност след спадане на нивото до дадена стойност във отрицателния фронт на импулса.


здр, продължаваме урока от предния път. сега ще ви покажем три графики на различни стойности на светене на светодиода, което зависи от това колко е отпушен
мосфет транзистора.

това може да се регулира със подаваното напрежение на управляващият пин, като такова напрежение със голяма точност на стъпката в увеличаваща или намаляваща последователност се постига със програмирането на процесор.

добавил съм и два волтметъра допълнително, като единият е на захранващото напрежение на схемата, а вторият на изходящото общо напрежение на товара към транзистора. ВИНАГИ СЛЕДЕТЕ ТЕЗИ ДВЕ НАПРЕЖЕНИЯ за да сте сигурни че транзисторът се е отпушил на 100% процента, като загубата на напрежение не преминава 0,1 ВОЛТ от захранващото.

подобен проблем срещнах при програмирането на един процесор където се оказа че на изхода на пина не се получава достатъчно напрежение за да отпуши транзистора. намерих начин да програмирам процесора така че да може да управлявам товарният транзистор в пълна мощност. имайте предвид че за товари като разните двигатели, соленоиди и всякакви други електро-механични системи е необходимо пълно 100 процентно управление на крайните стъпала /транзистори/ за да може механичните възли и системи да сработят.

ако не обръщате внимание на изходящите напрежения на крайните стъпала може да не получите желаният работен ефект на вашите процесорни управления.
тов е важно също за осветителните тела, динамични управления на всякакви видове електродвигатели, електро-механични възвратно-постъпателни системи, както и много други. измерванията може да правите с нормален мултицет, като спазвате полярността на измервателните щеки, както и позициите където измервате напреженията. неправилно поставени, могат да дадат грешни резултати както това ще доведе до подвеждането ви във верността на контрола и качеството.

на първата графика виждаме нормалната работа на схемата, като изходящият волтметър показва отклонение 0.01 волт от входящото напрежение.




на втората графика съм променил едното съпротивление така че стойността му да запуши леко транзистора. това довежда до по-малко входящо напрежение на входа на транзистора и съответно по-слабо светене на светодиода. както виждате на изходящият волтметър вече стойността е доста по висока от предходната графика.





на третата графика съм увеличил същото съпротивление със съвсем малко, което обаче е достатъчно да намали светенето на светодиода почти до нула. напрежението на изходящият волтметър вече е двойно от предходното. това показва че транзистора още повече се е запушил. ако продължаваме да увеличаваме стойноста светодиода ще спре да свети изобщо.





за други товари където работната графика в съотношение време/волтаж е по-плавна може да се усети по-добре промяната на стойността на съпротивлението за да се контролира работа на крайният товар.

този процес се нарича ДИМИРАНЕ. в предните уроци сме споменавали за това. както и на главният сайт има направен и програмиран процесорен контролер за ргб светодиодни ленти. в зависимост от мощността на крайните товари това може да бъде направено за всякакви машини и механизми.