DIY Electronic projects
ATmega168 7-Segmentni Display - Printable Version

+- DIY Electronic projects (https://forum.yu3ma.net)
+-- Forum: Mikrokontroleri (https://forum.yu3ma.net/forumdisplay.php?fid=52)
+--- Forum: Atmel (https://forum.yu3ma.net/forumdisplay.php?fid=55)
+--- Thread: ATmega168 7-Segmentni Display (/showthread.php?tid=1847)

Pages: 1 2 3 4 5 6 7 8 9 10


RE: ATmega168 7-Segmentni Display - ronovar - 04-03-2018

Instalirao AVR Studio 7 super je...ali malo sam isao citat assembler i napravio sam ovaj led blink u assembleru...kompilirao sa avrasm i to radi...evo i koda...pa ako se slazete da krenem sa assemblerom pa ako gdje zapnem da se pomogne...znam da je assembler low level programming language ali nekako mi se iskreno najvise svidja i logican mi je...a i kad ga svladam kadnije dekompiliram HEX file od nekog projekta i lakse cu da shvatim sto sei kako pisalo..a i tocno se vidi kako avr radi i gdje je koji registar stack i stack pointer i sbi (set bit input) i cbi (clear bit input)...slican je jakoo C kodu koji sam napisao za LED blink ali mislim da ce moj izbor ici na assembler...jer tu se radi o tome da nema pretvaranja c u asm...nema vecih filova koje imaju trial verzije compilera i prirodan mi je jezik...

evo i asm kod za led blink preko delaya (za timere cu za koji dan posto citam opsezan tutorial na netu)...znam da jedino bode u oci ova delay rroutina ali i to ce da se sredi samo da malo pohvatam registre brne i dec ..dakle mikrokontroler broji u prazno i eto delaya...

/*
 * LED Blink
 */
.include "C:\FastAVR\inc\m328pdef.inc"

.DSEG
.CSEG
.ORG 0x0000

Reset:
; Initialize Stack
ldi yl, byte1(RAMEND)
out SPL, yl
ldi yh, byte2(RAMEND)
out SPH, yh
sbiw yl, 32

; Set PORTD Output
ldi zl, byte1(255)
out DDRD, zl

Loop:
; Turn LED On
sbi PORTD, 0

; Wait 500ms
ldi zl, byte1(1000)
ldi zh, byte2(1000)
call WaitMs

; Turn LED Off
cbi PORTD, 0

; Wait 500ms
ldi zl, byte1(1000)
ldi zh, byte2(1000)
call WaitMs

; Return To Loop
rjmp Loop

;/////////////////////////////////////////////////////////
WaitMs:
ldi r20, 0x14
WaitMs1:
ldi r21, 0xC7
WaitMs2:
dec r21
brne WaitMs2
dec r20
brne WaitMs1
dec zl
brne WaitMs
ret


Jedino trebam pomoc oko fuse bitova...imam atmega328p spojen xtal1 i xtal2 18.432MHz quartz i 2x 22pF keramiku nanjih pa na masu..pa me zanima kako trebam da podesim fuse bitove da radi na punom taktu?

Evo ekrana LOW FUSE:




RE: ATmega168 7-Segmentni Display - vojinilic - 04-03-2018

ASM ti je pravi izbor, jer ces u njemu da naucis kako MCU radi. Ja licno nisam nikada koristio ASM za AVR, vec za PIC-eve i 8051, ali sve je to isto manje vise. AVR sam iskljucivo u C-u programirao. Pocetak ti je odlican. Samo cepaj.
Fusevi se podesavaju na sledeci nacin:
CKDIV8 = 0
CKOUT = 0
SUT1 = 1
SUT0 = 1
CKSEL3 = 0
CKSEL2 = 1
CKSEL1 = 1
CKSEL0 = 1


RE: ATmega168 7-Segmentni Display - gorankg - 04-03-2018

Pisati u asembleru za AVR je divota za razliku od PIC-a. Da vidiš kako šta radi može ti dosta pomoći simulator. Ja sam koristio one najstarije serije AT90S1200, AT90S2313 i AT90S8515. Posle se tek pojavila Tiny i Mega familija.
Vrlo zanimljiva stvar su načini adresiranja memorije. Pogledaj to obavezno. Atmel ima tri pokazivačka registra (X, Y i Z 16-bitni su) i kad provališ rad sa njima to ubija kako lepo ide. Ako zatreba pomoć, tu sam, setiću se mada nisam radio godinama.


RE: ATmega168 7-Segmentni Display - ronovar - 04-03-2018

Da evo bas dovrsavam timer1 interrupt...to radi divota pazi sad ovo sto sam dosad skuzio:

.include "C:\FastAVR\inc\m328pdef.inc"

- ova naredba ukljucuje definicije procesora koji cemo da koristimo (ATmega328p)

.DSEG

.CSEG
.ORG       0x0000         ; Reset Vector
              rjmp Reset
.ORG OVF1addr            ; Timer1 Overflow Interrupt
              rjmp Ovf1

- naredba .DSEG (Data Segment), .CSEG (Code Segment) i .ORG (ORiGin Addres) postavljaju pocetnu vrijednost adrese od kuda ce nas program da počne da se izvrsava a to sam definirao sa 0x0000 dakle pocinje od pocetka SRAMA. Data i Code Segment su priča za sebe i to se najbolje vidi u datasheetu upotrijebljenog kontrolera...no zasada je meni zanimljivi samo .ORG

- rjmp znači (Relative JuMP) znači da skače na adresu tj definiranu proceduru Reset iz koje se počne izvršavati program.

- naredba .ORG OVF1addr  je jako interesantna, pomocu nje sam definirao kada se dogodi timer1 overflow interrupt (brojač je prešao sa 65536 na 0) da se pozove Ovf1 procedura iz koje ce se izvršavati kod za pali/gasi led...a svaki mikrokontroller ima u svom inc file definiranu adresu koja je to kada se dogodi HW Timer1 Interrupt kod ATmega328p je to 0x001a tako da sam mogao i bez problema napisati:

.ORG 0x001a
        rjmp Ovf1

Što je potupno isti, ali sam mislio za buducnost i ako npr promjenim MCU nakon pisanja programa samo ukljucim drugi inc file i varijabla OVF1addr ce se automatski pokupiti sa tog novog inc fila i adresa ce biti odgovarajuca...ovo je fantasticno kad HW timer1 napravi interrupta pozove tu adresu (0x001a) i onda  se skace na proceduru interrupta u kojoj pišemo što da radi. 

Nakon toga ide Reset procedura u kojoj radimo inicijalizaciju Stacka i Stack Pointera koji sadrzava adrese SRAMA, jumpova i vrijednosti registra kojih imamo X Y i Z. Kod registra imamo Xl Xh i Yl Yh kao i Yl i Yh...to znaci posto su registri 8-bitno koristenjem Low i High Byteova imamo 16-bitnu vrijednost jer smo 16-bitni broj pohranili u dva registra...fantasticno!

Te registre mozemo vidjetu i inc i za ATmega328p je to ovako definirano:

; ***** CPU REGISTER DEFINITIONS *****************************************

.def XH = r27
.def XL = r26
.def YH = r29
.def YL = r28
.def ZH = r31
.def ZL = r30

To su registri koji se koriste za pisanje i citanje...i postavljanje portova (in/out) razne operacije, brojace....

Dakle sljedecio dio koda je:

Reset:

; Initialize Stack Pointer
ldi yl, byte1(RAMEND)
out SPL, yl
ldi yh, byte2(RAMEND)
out SPH, yh
sbiw yl, 32

- Reset proceuru smo pozvali sa pocetne adrese 0x0000 i tu trebamo da inicijaliziramo stack pointer jer on nam je jako bitan za cuvanje registara i pointera na nase skokove u programu....

- ldi znači Load Immediate (Učitaj odmah u registar) yl (y je registar u CPU-u a l znači LOW byte tj prva niza polovica 8-bitnog broja) jer je varijabla RAMEND 16-bitna i nikako nemozemo da je ucitamo u 8-bitni registar jer su registri X Y i Z 8-bitni pa koristimo yl (Y Low) i yh (Y High) gdje 16-bitnu vrijednost RAMEND vrijednosti stavljamo u dva 8-bitna registra i pomocu SPL i SPH postavljamo Stack Pointer Low i High vrijednosti Stacka. Out naredba se koristi postavi iz registra yl i yh vrijednost u SPL i SPH Stack. 

- RAMEND je labela koja oznacava zadnju adresu SRAMA i to nam je jako bitno s time program zna do koje vrijednosti SRAMA moze da koristi vrijednosti, jumpove i data pointere za nase jump lokacije 

- sbiw (Subtract Immediate From Word) znaci da postavljamo velicnu Stacka 32byta (nju smanjimo ili povecamo ovisno o tome koliko nam je mjesta potrebnio za spremanje varijabli)

Sljedece na redu je konfiguracija Timera:

; Timer1 = TCNT1L - 0xB1, TCNT1H - 0xB9 (1sec)

ldi zl, byte1(177)
sts TCNT1L, zl
ldi zh, byte2(185)
sts TCNT1H, zh

- ovu funkcija ucitava u dva 8-bitna registra vrijednost početka timera od kojeg treba da počne da broji a to je 0xB1B9 i postavlja tu vrijednost na Timer1 (TCNT1L i TCNT1H)
  to je isto kao dam sam u Basicu napisao: $Timer1=&hb1b9

; Prescaler 1024 (CS02, CS01, CS00 = &b00000101)

ldi zl, 0x05
sts TCCR1B, zl

- zatim postavljamo prescaler koji djeli frekvenciju kristala sa preskalerom i time usporuje timer da nam timing bude tocan tu sam odabrao 1024 za ostale vrijednosti pogledati tablicu u ATmega328p gdje su bitovi CS00 CS01 i CS02 lijepo opisani koji treba da bude 1 a koji 0....ostali bitovi su 0 jer se koristi 8 bitni registar.

; Enable Timer1 Overflow Interrupt

ldi zl, 0x01
sts TIMSK1, zl

- sa ovom naredbom lijepo omogucujemo Timer1 tj postavljamo registar TIMSK1 na 1 da omogucimo timer1

; Enable Global Interrupts
sei


- sa ovom naredbom omogucujemo globalne interrupte (inače nam interrupt nebi prekidao glavni program)

; Set DDRD Output

ldi zl, byte1(255)
out DDRD, zl

- postavljamo DDRD registar komplet da bude izlazni da mozemo ga kasnije paliti igasiti (0V i 5V)

Loop:
    rjmp Loop


- Loop je glavna petlja koja se izvrava u krug i to je nas glavni program koji se prekida kada se dogodi interrupt...kada se interrupt zavrsi vraca se opet u ovaj glavni program tj loop.



Ovf1:

; Save SREG On Stack
in r2, SREG
push zl
push zh

; Timer1 = TCNT1L - 0xB1, TCNT1H - 0xB9 (1sec)
ldi zl, byte1(177)
sts TCNT1L, zl
ldi zh, byte2(185)
sts TCNT1H, zh

; Toggle LED On/Off
in zl, PORTD
ldi r23, 0x01
eor zl, r23
out PORTD, zl

; Restore SREG
pop zh
pop zl
out SREG, r2
reti

- ovo je interrupt koji se poziva kada se dogodi timer1 interrupt i na pocetku interrupta Spremamo vrijednost SREG registra u stack jer ce nam trebati da bi nam pravilno radio interrupt.

- zatim postavljamo početnu vrijednost Timer1 od kojeg treba da broji da bi dobio potrebni delay (1sec)

- citamo vrijednost PORTD i invertiramo stanja izlaza u registru da bi mu promjenili stanje (znaci 0b00000001 ce da postane 0b11111110) - toggle

- i na kraju vracamo stanje u SREG iz stacka i preko naredbe reti (return interrupt) vracamo se u glavni program (loop)

Jednostavno zar ne?

E sada imam jedna problem led mi umjesto 1sec svjetli i gasi se 30sekundi..pa me zanima dali to ima veze sa fuse bitovima? Radio sam po kalukatoru sa neta za timer1 pocetne vrijednosti..kristal je 18.432MHz...ali kao da MCU ne radi na tome taku isprogramirano je po gore postu kak trebaju Low Fuse da budu postavljeni...

Ovakvu ja sliku imam assemblera prema MCU pa ako sam gdje pogrijesio mozete me ispraviti pa da procim dio..ovo sam sa datasheeta i primjer kodova sa neta sklopio i dobio nekakvu loguku u glavi..znam da tu ima puuno togaaa...ali sa ovim assemblerom mogu da radim svaku sitnicu na AVR-u nisam vise ogranicem na gotove funkcije...

Kod je komilirani veliki... 268 bytova i ovaj timer mu bas zauzima mjesta jos mi se to cini veliki HEX za samo timer..ali dobro necu se muciti sa time..tako mora da bude..compiler je atmelov avrasm2.exe

Pa ako moze neko da pogleda program... evo i asm koda:


.rar   LED_BLINK.rar (Size: 610 bytes / Downloads: 2)


RE: ATmega168 7-Segmentni Display - vojinilic - 04-03-2018

Ronovar,

ja sam ti pogresno rekao sa fuses. Ispalo je da ukljucen CKDIV8. Upisi u low fuses registar 0xFF.
Drugi problem ti je opes pogresno racunanje vrednosti koju upisujes u TMR1 registar. Opet ti fali 1!!! Prava vrednost treba da bude 0xB9B0!!! Batali te kalkulatore, posto ne znas ko ih je pravio.


RE: ATmega168 7-Segmentni Display - ronovar - 04-03-2018

Uprogramirao tj disablao clock division / 8 i sada je umjesto 1sekunde 4sekunde delay...mora da mi je kod negdje zeznuti bas gledam gdje je i sto...

evo i slike fuse kako sam sada isprogramirao:



A za calulatore imas pravo napisat cu svoj program u phpu da samo unesem vrijenosti izracuna jer ovo sto je sve na netu katastrofa...


RE: ATmega168 7-Segmentni Display - vojinilic - 04-03-2018

Mislim da znam gde ti je problem. TMR je 16-bitni. Kada se upisuje u 16-bitni registar, prvo se upise High byte, pa onda Low byte. Kod citanja je situacija obrnuta.


RE: ATmega168 7-Segmentni Display - vojinilic - 04-03-2018

Takodje,

ne znam kako se ponasa tmr, ako mu prvo upises vrednost brojanja, pa onda postavis prescaler. Logicno je da prvo ide preskaleer, pa onda vrednost brojanja.


RE: ATmega168 7-Segmentni Display - ronovar - 04-03-2018

Da to sam upravo i ja mjenjao jer sam mislio da je do toga medutim opet isto...4 sekunde treba za LED on i OFF.

Fuse bitove sam postavio kako sam gore stavio sliku...tek sad mi nista nije jasno....

EDIT:

stavio sam:

- prescaler
- postavio brojac
- enable timer1
- enable global interrupts

I dalje isto...4sekunde delay umjesto 1


RE: ATmega168 7-Segmentni Display - gorankg - 04-03-2018

Ne znam šta ti u primeru radi ovaj deo u prekidnoj rutini:

push zl
push zh

Mislim da ti je to suvišno.
Možeš preload vrednosti tajmera1 da smestiš u neka druga dva registra opšte namene, recimo r16 i r17 ti sadrže vrednosti 0xB9, i 0xB1
Onda u prekidnoj rutini samo radiš:

out TCNT1H, r16
out TCNT1L, r17

Time redukuješ ovaj deo koda:

    ;ldi        zl, byte1(177)
    ;sts        TCNT1L, zl
    ;ldi        zh, byte2(185)
    ;sts        TCNT1H, zh


X, Y i Z registre čuvaj za važnije stvari. Napomenuo sam ti da ti mogu pomoći kod adresiranja kao pokazivači.

Na startu Timer1 prekidne rutine možeš onemogućiti prekide (za sad) naredbom cli a pre izlaska iz prekida ponovo omogućiš sve prekide sa sei.
Nije loše i da obrišeš TOV bit u registru TIFR1 tako što upišeš 1 na njegovo mesto. On treba automatski da se obriše po izlasku iz prekida ali...


RE: ATmega168 7-Segmentni Display - Macola - 04-03-2018

Ronovar,

Svaka čast za odluku da počneš sa asm! Pravi red učenja.


RE: ATmega168 7-Segmentni Display - ronovar - 04-03-2018

Odlicno je ova ideja nije mi ni pala na pamet...sa prekidom u prekidnu routu gasim globalne interrupte izvrsim postavljanje vrijendosti timera i opet enablam globalne interrupte..sa tom "fintom" ustedio sam 4worda sto je punooo....a program isto radi...

@Macola...ima jos tu puunoo da ucim..tek sam sada na pocetku..srecom ima vas tu koji znate pa me ispravljate, ima detaljan atmelov datasheet gdje je sve lijepo objasnjeno...malo logike pogledat asm naredbe i to je to...stavio sam u fastavr bas isti kod i file je veci za 12 worda...katastrofa kako je neoptimizirani kod iz bas u asm...ovako vjerujem da ima jos mjesta da se optimizira ali prvo da rjesimo zasto umjesto 1sekunde radi 4sekunde blink led diode..ako pomogne mogu da snimim kako se pali gasi na prototipu pa postavim ovdje da se vidi...mislim da je kod ok...

Evo i tog malog moda koji vrlo vaznih 4Worda savea:

Ovf1:
; Disable Global Interrupts
cli


; Timer1 = TCNT1 - 0xB9B0 (1sec)

sts TCNT1H, zh
sts TCNT1L, zl


; Toggle LED On/Off
in zl, PORTD
ldi r23, 0x01
eor zl, r23
out PORTD, zl

; Enable Global Interrupts
sei
reti

Jeli tako sad ok ili bi bilo jos sto mjenjati? Zanima me podesvanjae uvijek zastavice za globalne interrupte sa 1 na 0 u prekidnoj routini jeli to utjece na CPU usage ili je to normalno bez ikakvog utjecaja na opterecenje CPU-a i interne sabrinice jer svake sekunde treba da gasi pali registar za globalne interrupte...


RE: ATmega168 7-Segmentni Display - gorankg - 04-03-2018

Zabraniš prekide u prekidnoj rutini ukoliko ne želiš da te neki drugi prekid uznemirava dok ne završiš posao tebi bitan.
Nisi probao sa:

out TCNT1H, r16
out TCNT1L, r17

r16 i r17 napuni na početku programa sa 0xB9, i 0xB1.

Ne brini za opterećenje CPU to je beznačajno za sad.

Probaj da bitove u registrima postavljaš sa sbr i cbr



RE: ATmega168 7-Segmentni Display - ronovar - 04-03-2018

out nemogu da koristim jer mi compiler daje:

error: Operand 1 out of range: 0x85
Operand 1 out of range: 0x84

moram da koristim samo sts preko njega prolazi sts

Mislis ovako da napravim?

U Reset routini:

; Timer1 = TCNT1 - 0xB9B0 (1sec)

ldi r16, byte2(185)
ldi r17, byte1(176)
sts TCNT1H, r16
sts TCNT1L, r17

A u interrupt routini kako sam gore postavio kod...kompilirao poslao u MCU i isto 4sec delay...


RE: ATmega168 7-Segmentni Display - gorankg - 04-03-2018

Ne može out da piše u TCNT1H i TCNT1L. Zbog toga se buni kompajler, moja je greška.
Možda su ti FUSE pogrešno postavljeni.
Možeš da clock izbaciš na PORTB0 pomoću CKOUT bita u FUSES pa da osciloskopom ili frekvencmetrom izmeriš clock


RE: ATmega168 7-Segmentni Display - vojinilic - 04-03-2018

Ronovar,

ovo je probano u AVR simulatoru. Postavljen je kristal 18,432MHz i low byte fuses ima vrednost 0xff. Interapt  se generise na 1s


RE: ATmega168 7-Segmentni Display - ronovar - 04-03-2018

Da sada to radi vidim da sam kod timera izostavio TCCR1A i B a i gledam sada CTC (Clear Timer On Compare) pa cu i sa njime probati...koliko vidim dosad to je pravi nacin HW clear timera i brojanje do postavljenje vrijednosti registra...ovaj tvoj kod sad radi savresnno...procot cu ga detaljno pa se javim...vidim da sam ispustio jakoo bitan dio a to je Timer Counter Control Register...zahvaljujem..i ovo sada radi perfekt tocno na sekundu


RE: ATmega168 7-Segmentni Display - Macola - 04-03-2018

Quote:@Macola...ima jos tu puunoo da ucim..tek sam sada na pocetku..srecom ima vas tu koji znate pa me ispravljate, ima detaljan atmelov datasheet gdje je sve lijepo objasnjeno...malo logike pogledat asm naredbe i to je to...stavio sam u fastavr bas isti kod i file je veci za 12 worda...katastrofa kako je neoptimizirani kod iz bas u asm...ovako vjerujem da ima jos mjesta da se optimizira ali prvo da rjesimo zasto umjesto 1sekunde radi 4sekunde blink led diode..ako pomogne mogu da snimim kako se pali gasi na prototipu pa postavim ovdje da se vidi...mislim da je kod ok...

Na žalost drugar, nikada nisam radio sa AVR, ni na koji način.
Da bih ti pomogao morao bih paralelno sa tobom da sednem i učim asm za AVR seriju :-)
Nazirao sam da je AVR asm dosta fleksibilniji i moćniji od PIC asm, ali kad se čovek uhvati za jedno onda se drži toga kao pijan plota... Stvori gomilu alata i biblioteka i prosto mu dođe žao da sve to baci pa iznova :-)

Seti se tvog otpora, do pre svega par dana, oko napuštanja Basic :-)

Na sreću ima na forumu sjajnih ljudi koji ti već pomažu a radili su sa Atmel MCU i nemoj brinuti jer oni su top klasa ljudi.

Od mene imaš podršku za pravilan red učenja i ako ti treba neki savet oko hardvera nekih periferija, pomoći ću koliko mogu.

Kad savladaš asm od nekog MCU, on je tvoj i Božji, ma šta koristio posle kao jezik za pisanje! Uvek možeš pogledati list fajl i razumeti ako kompajler pravi s**nje (mada se to u novije vreme ekstremno retko događa jer je već nekoliko generacija programera pregazilo tu priču i poispravljalo greščice).
Generalno, ono što se nauči radeći u asm je način za vrlo optimizovanim pisanjem u bilo čemu kasnije.
-------------------------------------------------------
////////////////////////////

Nego, vrlo si mi zanimljiv kao čovek, onaj od retkih, koji ide težim putem potpuno svojevoljno i još se raduje tome.

To je obično znak posedovanja jakih m*da u budućem napretku i radu.

Svom instiktu jako verujem jer sam znao da prepoznam i "iskujem" par desetina učenika, dobrih i kvalitetnih, a nekih i u svetskom kalibru.

Nisam ih ja napravio takvim jer je "testo" od kog su načinjeni bilo vrhunsko, a od toga se lako mesi i vrhunski hleb... Ja sam im samo bio top trener koji je znao da ih gura u krajnju radoznalost i u izbor teže putanje...

Vidi, postoji način da se oslobodiš bilo kakvih zavisnosti od raznih kompajlera i alata za programiranje, uz naravno izbor najtežeg puta na početku, sa kasnijim benefitima kakve ne možeš ni da sanjaš, a kao korisnu posledicu izbora najteže putanje.

Čini mi se da je za takvog čoveka (moj vrlo snažan predosećaj) ovo prava stvar za tebe: http://www.forth.org/

Pogotovo sada kada učiš asm i na samom si početku, gde nisi "iskvario ruku" što bi rekli harmonikaši :-)
To ti je kao kad bi učio sada da voziš u Britaniji, suprotnom stranom, a već godinama voziš ovde.
Može naravno, ali uz jak otpor i jak napor.

Ako bi na primer počeo da učiš baš u Britaniji, onda bi ti ovo ovde bilo malo čudno, a ono normalno...

Forth koristi postfiks konotaciju i ljudima koji su već navikli na uobičajene sisteme programiranja deluje malo "u rikverc" :-)
Ako se na samom početku navikneš na postfiks, to ti za kratko vreme postane normalna stvar i nema nikakvog otpora niti tegoba.

Pazi sad!
Sasvim je očekivana oluja drvlja i kamenja na mene, od strane ljudi koji odlično pišu standardnim jezicima, jer ih upravo malo j*** taj postfiks i misle da to može biti neefikasno, te očekujem da će iz pete braniti standardne sisteme a tražiti mane Forth-u :-)

Na sreću sam živi svedok koliko moćan može biti taj sistem i kako zverski brz na najslaibijim MCU, a tek na jakim...
Forth sistem je rastegljiv od 8 bit MCU i prostih programiranja, preko Spejs šatla, pa do vrhunske obrade slike i slično tome.

Oblast koju pokriva Forth je ova:






Koristi se i ovde na primer:

http://web.archive.org/web/20101024223709/http://forth.gsfc.nasa.gov/

Još malo na tu temu:

http://www.forth.org/successes.html

Ima i za to sa čim trenutno radiš:

https://www.avrfreaks.net/forum/forth
http://flashforth.com/atmega.html

A vidii neke od jačih čipića za tu priču:
https://www.rs-online.com/designspark/hands-on-with-a-144-core-processor



U MCU se ubacuje Forth sistem za konkretan MCU i od tog momenta ti je unutar MCU interpreter i kros kompajler, a spolja ti treba jedan najprostiji terminal, žično ili bežično ka MCU i to je sve.
Terminalom možeš u letu modifikovati program i pogledati sadržaj MCU do poslednjeg bita u njemu...



Za početak:
https://www.google.rs/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwiA7o-clZ_aAhXkNJoKHSgGBf0QFggvMAE&url=https%3A%2F%2Fwww.dnd.utwente.nl%2F~tim%2Fcolorforth%2FLeo-Brodie%2Fthinking-forth.pdf&usg=AOvVaw1MO-zzEa8Fp4YEU0Eo0iBJ

https://www.google.rs/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=0ahUKEwi1gMbslZ_aAhXlZpoKHWBTDXAQFgg7MAI&url=http%3A%2F%2Fseriouscomputerist.altervista.org%2Fmedia%2Fpdf%2Fbook%2FStarting%2520Forth.pdf&usg=AOvVaw14VNnvEScXODDMADhV780K

----------------------------------------------------------------
 
Sad ili nikad, dok još nisi izabrao kojom stranom voziš, možeš početi lako sa Forth i neće biti nikakvog otpora, a iz Forth je lako se useliti u druge jezike, dok je obrnuto katastrofalno teško.
Oduzeće ti još 30-tak% vremena više, preko tog asm koji već učiš.

Upravo je pravi čas da paralelno učiš Forth i asm. Ta kombinacija je savršenstvo koje nema premca kad se savlada.

Gajim nadu da ćeš makar pregledati ovo što ti predlažem (šta god ti bilo ko rekao u vezi toga), jer instikt me retko vara...
A ti posle proceni da li želiš.


Pozdrav Ronovar,
Macola


RE: ATmega168 7-Segmentni Display - mikikg - 04-04-2018

Samo polako, proba ce on i Forth i C++, ASM vec pise, tu nema prepreka, samo je pitanje volje (u bilo kakvom obliku) i neophodno vreme.
To je izazov ucenja novog, probas sve sto ti padne pod ruku jer jedino tako mozes da kaze "meni to najvise lezi".
Meni sad najvise lezi C/C++ u ovim svojim malo vec senior programerskim godinama, a tu ima toliko tek jos da ucim da nisam svestan sta me ceka, ali imam vrlo jaku volju : )


RE: ATmega168 7-Segmentni Display - Macola - 04-04-2018

Samo konstatujem da je pravi trenutak da Ronovar načne Forth, upravo sada dok još nije odabrao stranu kojom vozi.

Kada počne sa C i razgazi ga, obično biva prekasno za Forth jer se javi navika i jak otpor (kao i kod tebe na primer :-)
A znamo kakav ti je Forth frik bio otac (i nemoj se ljutiti na mene zbog toga što kažem).

Šta misliš u čemu Mlađa programira test sisteme sada u Apple (preuzeli su ga iz Dialog Semiconductors već početkom godine)?
A znaš da Mlađa piše vrhunski u bar 15 jezika...

Sad je pravi trenutak za Ronovar-a ukoliko poželi Forth!
To je tako, kao dogma, bez dodatnih objašnjenja.