Vizitator Deles Postat Noiembrie 15, 2012 Partajează Postat Noiembrie 15, 2012 Buna seara,Precizez de la inceput ca sunt incepator si sper sa nu deranjez cu intrebari plictisitoare sau stupide ..... dar asa invatam toti. As dorii daca ma poate ajuta cineva cu o schema de legaturi de la un Atmega8( sau oricare din familia Atmega) la o memorie eprom 24C32(sau alta de gen 24CXX)si dac se poate si o secventa de cod pentru memorarea unei variabile in 24C32(nu in epromul din Atmega) , citirea ei si afisarea pe un LCD. Rugamintea mea este daca se poate codul sa fie in Bascom deoarece am inceput sa invat programarea cu el, C-ul ma depaseste momentan Cu multumiri, Florian. Link spre comentariu
Vizitator Deles Postat Noiembrie 16, 2012 Partajează Postat Noiembrie 16, 2012 Chiar nu ma poate ajuta nimeni? Link spre comentariu
shebu_18 Postat Noiembrie 17, 2012 Partajează Postat Noiembrie 17, 2012 Legatura intre memorie si atmega se face prin SCL SDA(ambele integrate un numa la pin in datasheet, si aceste 2 linii se leaga cu 2 rezistente la 5V). Apoi ai gnd si 5v unde e clar unde trebuie legate, A0,A1,A2 se leaga la gnd, WP tot la gnd. Exemplu de cod gasesti aici http://www.rn-wissen.de/index.php/Bascom_und_I2C_EEprom Link spre comentariu
dorelb Postat Noiembrie 17, 2012 Partajează Postat Noiembrie 17, 2012 @ Deles. Si schema electrica, din link-ul de mai sus : Link spre comentariu
Vizitator Deles Postat Noiembrie 19, 2012 Partajează Postat Noiembrie 19, 2012 Multumesc mult pentru ajutorAm incercat schema se pare ca este ok , dar a intervenit alta problema.Codul l-am transformat pentru un Atmega16 (asta l-am avut disponibil ) iar memoria am folosit un 24C32, toate bune si frumoase ,dar se pare ca nu imi scrie in eprom iata si codul pe care l-am folosit poate am gresit eu la ceva , sau trebiue sa mai modific ceva si la fusebit , atmega e default .========================= COD 24C32A =============================$regfile = "m16def.dat"$crystal = 8000000Config Portb.2 = OutputConfig Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7Config Lcd = 16 * 2 , Chipset = Dogm162v5ClsSound Portb.2 , 800 , 20 Config Scl = Portc.0 Config Sda = Portc.1Dim X As ByteDim A As WordDim B As WordDim Schreiben As ByteDim Lesen As ByteDim Adresse As Word At $160 'Die Adresse als Word-VariableDim Low_adresse As Byte At $160 Overlay 'Zeiger auf das erste ByteDim High_adresse As Byte At $161 Overlay 'Zeiger auf das zweite Byte'===================Hauptprogramm===============================================Do'----schreiben----For Adresse = 250 To 259 'Adresse geht über die Byte-GrenzeIncr X '1 bis ÜberlaufI2cstart 'StartI2cwbyte &HA0 'Sende SlavadresseI2cwbyte High_adresse 'Sende Speicheradresse HighI2cwbyte Low_adresse 'Sende Speicheradresse LOWI2cwbyte X 'Sende WertI2cstop 'stopWaitms 10Locate 1 , 1Lcd "->Adr=" ; Adresse ; " X=" ; X ; " " 'Anzeige vom schreibenWaitms 100Next Adresse'---lesen----For Adresse = 250 To 260I2cstart 'StartI2cwbyte &HA0 'Sende Slavadresse +1 für SchreibenI2cwbyte High_adresse 'Sende Speicheradresse HighI2cwbyte Low_adresse 'Sende Speicheradresse LowI2cstart 'StartI2cwbyte &HA1 'Sende Slavadresse +1 für LesenI2crbyte Lesen , Nack 'Lese Adresse vom EEpromI2cstop 'StopLocate 2 , 1Lcd "<-Adr=" ; Adresse ; " L=" ; Lesen ; " " 'Anzeige vom lesenWaitms 100Next AdresseLoopEndpe afisaj apare L = 255 incontinu Va rog ajutatima Link spre comentariu
shebu_18 Postat Noiembrie 19, 2012 Partajează Postat Noiembrie 19, 2012 In data sheet la pagina 12 la random read ai explicat ce trebuie sa faci ca sa citesti. Eu as folosii random read, unde trebuie sa ii zic eu adresa de unde sa citeasca.In codul tau nu mi se pare ok treaba cu cititu. Trimit start, adresa, comanda de write, adresa din memroie pe 13biti, start di nou, adresa cu comanda read si primesti cei 8 biti de date.Modifica codul tau sa indeplineasca asta si apoi mai vedem. Link spre comentariu
Vizitator dooctoor Postat Decembrie 7, 2012 Partajează Postat Decembrie 7, 2012 De ceva timp am inceput sa studiez programarea micrcocontrolerelor din necesitati practice si m-am intilnit cu niste probleme pe care singur nu le pot descurca, folosesc Mega81) De ce nu se genereaza intreruperea Overflow Timer0 cind folosesc sursa de tact din exterior (cu CK intern functioneaza ), sau nu e posibila asa intrerupere ?2) Am configurat Timer1 in asa mod ca sa am o intrerupere Compare Match la o anumita valoare..(acum doar experimentez pentru o aplicatie) iar intreruperea se genereaza peste citeva tacte fara sa ajunga la valoarea OCR1=xxx, face salt la vectorul intreruperei (rjmp TIM1_COMPA ; Timer1 CompareA Handler), se trateaza subrutina, se returneaza la vectorul intreruperei...si iar sare la subruina...poate eu ceva nu am configurat corect..prezint codul in ASM . In urmatorul tact face salt la vectorul intrerupere..Flagul pentru cererea de intrerupere OCF1A se activeaza de la sine...dupa ce am configurat TCCR1A; Program : starter; Device : Mega8; Description : 1 bloc; Last Updated : 14 august; Author : dooctoor.device mega8.include "m8def.inc" .def temp=r16.def temp1=r17.def temp2=r18.def temp3=r19.def COUNT=R20.cseg rjmp RESET ; Reset Handler ;rjmp EXT_INT0 ; IRQ0 Handler RETI ;rjmp EXT_INT1 ; IRQ1 Handler RETI ;rjmp TIM2_COMP ; Timer2 Compare Handler RETI ;rjmp TIM2_OVF ; Timer2 Overflow Handler RETI ;rjmp TIM1_CAPT ; Timer1 Capture Handler RETI rjmp TIM1_COMPA ; Timer1 CompareA Handler RETI ;rjmp TIM1_COMPB ; Timer1 CompareB Handler RETI ;rjmp TIM1_OVF ; Timer1 Overflow Handler RETI ;rjmp TIM0_OVF ; Timer0 Overflow Handler RETI ;rjmp SPI_STC ; SPI Transfer Complete Handler RETI ;rjmp USART_RXC ; USART RX Complete Handler RETI ;rjmp USART_UDRE ; UDR Empty Handler RETI ;rjmp USART_TXC ; USART TX Complete Handler RETI ;rjmp ADC ; ADC Conversion Complete Handler RETI ;rjmp EE_RDY ; EEPROM Ready Handler RETI ;rjmp ANA_COMP ; Analog Comparator Handler RETI ;rjmp TWSI ; Two-wire Serial Interface RETI.ORG 20RESET: ldi temp,low(RamEnd) out SPL,temp ldi temp,high(RamEnd) out SPH,temp ;----------------------------------------------------------------------------------- LDI TEMP,(1<<1)|(1<<2)|(1<<3) ; PB1,2,3 - OUT OUT DDRB,TEMP LDI TEMP,(0<<0) ;PB0 - INPUT OUT DDRB,TEMP CLR TEMP OUT PORTB,TEMP ;----------------------------------------------------------------------------------- LDI TEMP,(1< Link spre comentariu
Vizitator AEMelectronic Postat Decembrie 8, 2012 Partajează Postat Decembrie 8, 2012 Am facut urmatorul montaj , http://avrprojects.net/images/LCD%20The ... 35_sch.jpg + cod http://avrprojects.net/attachments/arti ... 20LM35.bas exista insa o mica problema, nu am gasit LM35 doar LM35DZ termometru arata cam cu 5.5-6 grade mai mult decat temperatura reala as vrea sa il fac sa masoare si temperaturi negative da stiu, nici codul nu e conceput pt temp negative, nici LM nu masoara temperaturi negative ,dar am vazut pe net ca sunt care au facut LM35DZ sa masoare temperaturi cu - ma poate ajuta cineva prima data sa il fac sa masoare temperatura normala fara erori? apoi poate si cea cu - Link spre comentariu
Vizitator AEMelectronic Postat Decembrie 8, 2012 Partajează Postat Decembrie 8, 2012 mai este o mica greseala la pinul 5 al LCD-ului dar a fost corectata Link spre comentariu
ratza Postat Decembrie 10, 2012 Partajează Postat Decembrie 10, 2012 Cele care măsoară şi temperaturi negative sînt LM335. Diferenţa de cîteva grade provine din referinţa ADC-ului, adică tensiunea de alimentare. În mod sigur nu e fix 5,000V. Link spre comentariu
nico_2010 Postat Decembrie 10, 2012 Partajează Postat Decembrie 10, 2012 @dooctoor: Ceea ce tie ti se pare a fi generare de intrerupere cu clock intern este de fapt actiunea watchdog a microcontrollerului. Pentru a activa intreruperea aferenta Overflow Timer0 ar trebui sa indepartezi semnul de punctuatie ";" de aici: ;rjmp TIM0_OVF ; Timer0 Overflow Handler RETI In ceea ce priveste comportamentul anormal al intreruperii generate de Compare Match, ar trebui sa dezactivezi flagul "Global Interrupt Enable" (prin instructiunea "cli") in subrutina de tratare a intreruperii si sa il activezi la iesirea din aceasta subrutina. Link spre comentariu
Vizitator AEMelectronic Postat Decembrie 12, 2012 Partajează Postat Decembrie 12, 2012 Cele care măsoară şi temperaturi negative sînt LM335. Diferenţa de cîteva grade provine din referinţa ADC-ului, adică tensiunea de alimentare. În mod sigur nu e fix 5,000V.te asigur eu ca sunt fix 5Vam alimentat si din sursa + stabilizator si din acumulator+stabilizator Link spre comentariu
Liviu M Postat Decembrie 12, 2012 Partajează Postat Decembrie 12, 2012 Nu am facut nimic cu atmeluri asa ca nu pot ajuta la cod, da' din cate am vazut in data-sheetul lui LM35 acesta poate masura temperaturi negative daca i se modifica modifica referinta. In data sheet e data o schema cu 2 diode intre referinta LM-ului si masa. Tensiunea la iesirea LM-ului se va plimba tot intre 5V si masa, da' tensiunile mai mici decat tensiunea lui de referinta (caderea de tensiune pe cele 2 diode, ~2*0.7V=~1.4V) reprezinta temperaturile negative. Pentru calibrare trebuie masurata tensiunea exacta a referintei LM-ului si folosita in calculele din controller la calcularea temperaturii. Sau si mai elegant se foloseste o alta intrare ADC pentru a masura valoarea direct cu controllerul. Link spre comentariu
nico_2010 Postat Decembrie 12, 2012 Partajează Postat Decembrie 12, 2012 Cele care măsoară şi temperaturi negative sînt LM335. Diferenţa de cîteva grade provine din referinţa ADC-ului, adică tensiunea de alimentare. În mod sigur nu e fix 5,000V.te asigur eu ca sunt fix 5Vam alimentat si din sursa + stabilizator si din acumulator+stabilizatorIncearca varianta de mai jos:' ***************************************************************************' *' * Title : LCD Thermometer LM35.bas' * Version : 1.0' * Last Updated : 17.04.2006' * Target : AT Mega8' * Author : www.avrprojects.net' * Program code : BASCOM AVR' * Hardware req. : LM35' * Description : read analog value from LM 35 temperature sensor, show the result on a LCD' * display with bar-graph' ***************************************************************************$regfile = "M8def.dat" ' use the Mega8$crystal = 10000000'$simDeflcdchar 0 , 32 , 32 , 31 , 31 , 31 , 31 , 32 , 32 ' replace ? with number (0-7)'Deflcdchar 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ' replace ? with number (0-7)Deflcdchar 2 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 ' replace ? with number (0-7)Deflcdchar 3 , 16 , 16 , 31 , 31 , 31 , 31 , 16 , 16 ' replace ? with number (0-7)Deflcdchar 4 , 1 , 1 , 31 , 31 , 31 , 31 , 1 , 1 ' replace ? with number (0-7)Deflcdchar 5 , 32 , 32 , 28 , 28 , 28 , 28 , 32 , 32 ' replace ? with number (0-7)Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.6 , Rs = Portd.7Config Lcd = 20 * 4Config Adc = Single , Prescaler = Auto , Reference = Internal 'config ADCStart AdcDim W As Word , Perc As Word , Volt As Integer , Volt_d As Integer , Channel As Byte , I As Byte , Cols As Byte , Cols_d As ByteClsCursor OffLocate 3 , 1Lcd "0"Locate 3 , 5Lcd "10"Locate 3 , 10Lcd "20"Locate 3 , 15Lcd "30"Locate 3 , 19Lcd Chr(223) ; "C"Do W = Getadc(0) Volt = W * 2.5 Volt_d = Volt Mod 10 Volt = Volt / 10 Locate 1 , 1 Lcd Volt ; "," ; Volt_d Cols = Volt / 2 Locate 2 , 1 For I = 1 To Cols Select Case I Case 1 : Lcd Chr(3) Case 5 : Lcd Chr(4) Case 10 : Lcd Chr(4) Case 15 : Lcd Chr(4) Case 20 : Lcd Chr(4) Case Else : Lcd Chr(0) End Select Next I Cols_d = Cols Mod 2 If Cols_d > 0 Then Lcd Chr(5) Cols = Cols + 2 Else Cols = Cols + 1 End If For I = Cols To 20 Select Case I Case 1 : Lcd Chr(2) Case 5 : Lcd Chr(1) Case 10 : Lcd Chr(1) Case 15 : Lcd Chr(1) Case 20 : Lcd Chr(1) Case Else : Lcd Chr(32) End Select Next I Waitms 1000 LoopEnd Link spre comentariu
claudio Postat Decembrie 28, 2012 Partajează Postat Decembrie 28, 2012 Cum folosesc Watch-Dog Timerul?Am o aplicatie pe ATMega48, si se intampla ca dupa 3-4 ore sa nu mai functioneze.Ma gandesc sa-i setez WatchDog-ul, dar nu stiu cum se foloseste. E deajuns sa setez fusebitul WDTON?Ca idee, vreau ca WD-ul sa fie activ si sa supravegheze uC ca sa fie in functionare continua, in caz contrar sa il reseteze.Multumesc. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum