Toon posts:

De Atmel 128 programmeren in Embedded C

Pagina: 1
Acties:
  • 149 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Goeienavond iedereen,

Ik werk aan een project en ik moet een 8 bitsmicrocontroller programmeren ATMEGA128 in Embedded C, en ik heb heleboel sites bekeken maar niets gevonden wat daar op leek. Ik heb de registers bestudeerd van deze ATMEL 128, maar kom er niet uit. Ik moet deze microcontroller programmeren , dus ik moet de tijdsaanduiding kunnen laten zien op een LCD, dus 24 uurs en voor 7 dagen in de week, wie kan mij hierbij helpen????

Weet iemand misschien een aantal links over hoe ik de ATMEL 128 kan aansturen??

Ik zet het schema van het schema erbij en hoop dat ik veel reacties krijg.

Alvast bedankt.

  • whoami
  • Registratie: December 2000
  • Laatst online: 18:04
Hoi,
Zoals ik je ook per mail heb gezegd: het is niet de bedoeling dat anderen alles voor jou gaan maken, dus pas je topic eens even aan. Toon eens wat je zelf al gedaan hebt, geprobeerd hebt, waar je vast komt te zitten, etc....
Zie ook de PRG Quickstart.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Hoi Whoami,

Bedankt voor je snell terugkoppeling. Ik begrijp wat je bedoeld. Wat ik heb gedaan is het volgende:
Ik heb deCodeVisionAVR C Compiler geinstaleerd, en voorbeelden bestuurd hoe ik de tijd kan programmeren en deze laat zien op het LDC Display.
Ik heb ook de data sheet van de ATmel 128 bestudeerd, en daaruit heb ik geprobeerd verschillende registers aangestuurd . Ik zal plaatsen wat ik tot nu toe heb gedaan, dat is het volgende:

disp_copy (&dispp[0,0], "Date & Time");

get_time(&timestamp);
timestamp_show (&dispp[1,0], &timestamp);
if (tock_seconds)
{
dispp[1,12] = ' '; // blinking colon in displayed time
}
Voor de rest kom ik niet verder, ik weet niet hoe je de link moet leggen naar het LDC Display. Kan iemand mij een tip geven???

Alvast bedankt.

Verwijderd

Een standaard LCD display moet eerst worden geïnitialiseerd voordat het gebruikt kan worden. Hiervoor gebruiken de meeste LCD displays een bepaalde standaard (ik meen van NEC :? ) welke door de meeste LCD drivers (geschreven in C) wordt ondersteund. Heb je dit gedaan?

Wat doen de functies disp_copy, get_time en timestamp_show? Is het je al gelukt om een standaard tekst op het scherm van het display te krijgen?

Al met al is je informatie nog steeds karig en is het probleem nog niet echt duidelijk. Dus wat meer info is prettig en dan help ik je graag verder :) (dus ik ben benieuwd).

/me Lang geleden dat ik zoiets heb gedaan... erg leuk om me weer eens in te verdiepen :)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Heb je voor de grap al eens proberen te [google=atmel 128 lcd c code] en daarbij bijvoorbeeld deze pagina tegengekomen? Ik vind als ik op Google zoek meer dan genoeg voorbeelden eigenlijk? :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

-NMe- schreef op donderdag 02 november 2006 @ 14:53:
Heb je voor de grap al eens proberen te [google=atmel 128 lcd c code] en daarbij bijvoorbeeld deze pagina tegengekomen? Ik vind als ik op Google zoek meer dan genoeg voorbeelden eigenlijk? :)
Er zijn ook veel voorbeelden te vinden en die site is inderdaad een goed startpunt. Het is echter zeer de vraag of dergelijke code meteen werkt aangezien deze vaak voor een specifieke controller is geschreven. Vooral het werken met LCD displays kan veel tijd kosten aangezien het initialiseren van de driver tijdskritisch is. Maar het is niet heel moeilijk om deze code aan te passen (voor zover ik heb gezien) zodat het wel werkt op een andere (vergelijkbare) controller, dus een prima uitgangspunt.

Ik vraag me af in hoeverre de TS ooit een microcontroller heeft geprogrammeerd en wat hij wel kan op deze controller:
  • LED aan- en uitschakelen m.b.v. een knopje?
  • Timer initialiseren en gebruiken?
  • LCD initialiseren en gebruiken?
  • Combinatie van timer en LCD?
Dus ik ben benieuwd :? :)

  • Rowwan
  • Registratie: November 2000
  • Laatst online: 22:01
code:
1
2
3
4
5
6
7
8
disp_copy (&dispp[0,0], "Date & Time"); 

get_time(&timestamp); 
timestamp_show (&dispp[1,0], &timestamp); 
if (tock_seconds) 
{ 
dispp[1,12] = ' '; // blinking colon in displayed time 
}

:X

Waar komen deze functies vandaan? Ik geloof dat mijn voorganger gelijk heeft: Heb je uberhaubt ooit C geprogrammeerd?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Rowwan schreef op donderdag 02 november 2006 @ 16:10:
code:
1
2
3
4
5
6
7
8
disp_copy (&dispp[0,0], "Date & Time"); 

get_time(&timestamp); 
timestamp_show (&dispp[1,0], &timestamp); 
if (tock_seconds) 
{ 
dispp[1,12] = ' '; // blinking colon in displayed time 
}

:X

Waar komen deze functies vandaan? Ik geloof dat mijn voorganger gelijk heeft: Heb je uberhaubt ooit C geprogrammeerd?
Hoezo? Ik zie niks geks in die code? :) Als je doelt op het behandelen van de variabele dispp op deze manier, wat ik wel vermoed, dan ben ik bang dat je zelf niet helemaal weet hoe vele standaard LCD-libraries werken. Het betreft hier vast een LCD-module waar een x aantal regels aan tekst op kan, en een y aantal kolommen. Een array van strings (één string per regel) lijkt me dus helemaal zo gek niet. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Codevision heeft volgensmij een library er bij zitten voor lcd's (hd44780 of compatible character-displaytjes). Waarschijnlijk kan de help/handleiding je er meer over vertellen.
www.avrfreaks.net is ook een erg handige website als het gaat om avr's. Hier zal ook zeer zeker veel te vinden zijn over wat jij probeert te bereiken.

  • MisterData
  • Registratie: September 2001
  • Laatst online: 21:44
En sinds wanneer is array[a,b] een geldige syntax in C? Ik neem aan dat er array[a][b] wordt bedoeld ofzo? :)

  • Rowwan
  • Registratie: November 2000
  • Laatst online: 22:01
Als je doelt op het behandelen van de variabele dispp op deze manier, wat ik wel vermoed, dan ben ik bang dat je zelf niet helemaal weet hoe vele standaard LCD-libraries werken. Het betreft hier vast een LCD-module waar een x aantal regels aan tekst op kan, en een y aantal kolommen.
Mwa... ik heb al "enkele" LCD's aangestuurd via een AVR

Om eerlijk te zijn heb ik niet eens op dat detail naar de code gekeken.
code:
1
kajhdfh(124,3,4);


Is dit goed? Uiteraard is dit goed als alle functies precies doen wat je wil!.Er wordt een code fragmet gedumpt en wij moeten dan gokken wat de functies doen? AVR progarmmeren is meer dan alles functies aanroepen (port init etc.).

Als dit echt een serieuze vraag is kun je idd beginnen met codeVision of een GNU compiler. Wat al eerder gemeld is: Codevision heeft een LCD library. Verder zou ik de simulator VMLab (www.amctools.com) gebruiken. Hier kun je zelfs gesimuleerd een LCD aansturen.

[ Voor 28% gewijzigd door Rowwan op 02-11-2006 18:39 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

MisterData schreef op donderdag 02 november 2006 @ 18:01:
En sinds wanneer is array[a,b] een geldige syntax in C? Ik neem aan dat er array[a][b] wordt bedoeld ofzo? :)
True, maar ik heb wel meer gekke "extensies" van C als taal gezien in embedded C-compilers. Het bedrijf Microchip is daar bijvoorbeeld erg goed in. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
array[a,b] is gewoon geldige syntax hoor. De komma operator is een beetje (kuch) exotisch, maar gewoon C. De waarde van een komma expressie is de waarde van de rechterzijde, maar de linkerzijde moet eerst uitgerekend worden. Voorbeeld:

C:
1
2
3
4
5
int x[2];
x[0] = 0;
x[1] = 1;
int* px = x;
int y = ++p,*p;

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Rowwan
  • Registratie: November 2000
  • Laatst online: 22:01
Klopt, maar er valt weinig uit te rekenen aan [0,0] en [1,0]. De verklaring van NME lijkt waarschijnlijker. (Maar nog steeds vraag ik me af waar de functies vandaan komen)

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
1,0 gaat dus gewoon via dezelfde regels, hoe simpel dat ook moge zijn. 1,0 == 0.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

MSalters schreef op donderdag 02 november 2006 @ 22:47:
1,0 gaat dus gewoon via dezelfde regels, hoe simpel dat ook moge zijn. 1,0 == 0.
Het zou natuurlijk kunnen dat de compiler in kwestie een aparte rule heeft voor het gebruik van de comma operator binnen blokhaken. Ik heb, zoals ik al zei, in dergelijke compilers al vaker vreemde afwijkingen van de ANSI standaard gezien, dus ik zou er niet van opkijken. Uiteraard zou het ook kunnen dat bovenstaande gewoon een foutje is, dat toevallig wel compileert omdat de comma operator bestaat. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 30-11 00:17
-NMe- schreef op vrijdag 03 november 2006 @ 16:25:
Ik heb, zoals ik al zei, in dergelijke compilers al vaker vreemde afwijkingen van de ANSI standaard gezien, dus ik zou er niet van opkijken.
Mwah .. maar die hebben vaak te maken met specifieke uP dingen ( hardware, geheugen locaties etc )
Uiteraard zou het ook kunnen dat bovenstaande gewoon een foutje is, dat toevallig wel compileert omdat de comma operator bestaat. :P
Ik zet daar mijn geld op in, of er is iemand te aktief geweest met macro's :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Topicstarter
Hallo iedereeen,

Bedankt voor jullie info, jullie hebben mij echt geholpen, ik ga hiermee ann de slag als ik ergens tegen aanloop laat ik het jullie weten.Als ik het opgelost heb laat ik het jullie ook weten. Alvast bedankt, harold.

Verwijderd

Topicstarter
Goeienavond iedereeen,


Ik ben met die code begonnen om die Atmel 128 te programmeren, maar ik krijg geen karakters op het LCD Display, ik zal jullie mijn code laten zien:

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <mega8.h>
#include <stdio.h>
#include <stdlib.h>
#include <delay.h>
#include <i2c.h>

Struct   Edit _Item{

            char flash row;// row position of text
            char flash col;// col position of text
            char flash title[ 20];//item title
            int value ; // pointer to variable to display

                         };

Struct Edit_Item edit_display[20] = { 0,5, " Year :  ", & time.year,
                                                     1,5  " Month: ",& time.month,1,12,
                                                     2,5 " Day;     " & time.day, 1,31,
                                                     3,5 " Hour : " & time.hour,0,23,
                                                     4,5 " Minute: ", & time.minute,0,59,
}

if ( ++ time.second > 59 ) // count up seconds 
                                     // enough for each minute?

time.second = 0;
if ( ++ time.minute>59 ) //enough minutes for an hour?
// if running or low battery

{

set_LCD _ cur ( edit_display [ cur_item].row 
                       edit_display[ cur_item].col-1);

spintf ( text_buffer, "% s % 0,24 "edit_display[ cur-item].title,
          edit-display[ cur.-item] value0;
time.minute = 0;
// enough hours for a day?
if ( ++ time.hour> 23)

time.hour = 0; // enough days for a month

if  ( ++time.month> 12)

set_LCD_cur[ edit_display[cur.item].row
edit_display[ cur_item ]. col);

sprintf ( text_buffer,"%s%0,24", edit_display[cur_item].tittle,
edit_display[ cur_item].value];

clean display();

}



Kunnen jullie mij helpen??

Alvast bedankt, harold

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 30-11 00:17
Erm ... wat gebeurt er wel? Tot hoever functioneert het? Doet je LCD ueberhaupt wat? Contrast / Backlight?

BTW, Probeer eens code tags te gebuiken.

[ Voor 17% gewijzigd door farlane op 20-11-2006 22:51 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Harold101, lees Programming Beleid - De "quickstart" even door en geef op basis daarvan wat meer informatie, want hiermee kunnen we niets. ;) En als verdere aanvulling op farlane: Hoe post je code? / Hoe gebruik je de code tag? :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Hoi Nme,

Bedankt voor je snelle reactie. Ik heb de linken doorgenomen die je me heb gemaild. Maar ik heb de heletijd naar die code lopen kijken, ik heb de register bestudeerd van de Atmel 128 en ik heb de LCD Display bestudeerd, maar ik kom er niet uit. Ik wil graag de uren , minuten en seconden( de tijd weergeven ) op deze display, weet jij mischien hoe ik dit toch op het scherm kan krijgen??Alvast bedankt, harold.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op dinsdag 21 november 2006 @ 20:31:
weet jij mischien hoe ik dit toch op het scherm kan krijgen??Alvast bedankt, harold.
-NMe- weet dat vast; evenals een flink aantal anderen hier ;)
Wat ik nog steeds mis is een antwoord op de gestelde vragen: Wat werkt er wel en wat werkt er niet? Tot hoe ver werkt je code die je hierboven post? Wat heb je al geprobeerd? Heb je al gedebugged? Heb je al uitgesloten dat het niet aan "A" of "B" ligt? Krijg je uberhaupt al iets op je LCD? Heb je al een "Hello World" geprobeerd? Lukt dat wel? Enz.

"Weet jij misschien..." en "ik wil graag" met een vingertje naar een lap code wijzend is een vraag die we niet graag in PRG horen. We zien graag wat je zelf hebt gedaan zodat we gericht met je mee kunnen kijken om iets te kunnen aanvullen/uitsluiten voor je probleem; we zitten hier niet om je code te debuggen.

[ Voor 10% gewijzigd door RobIII op 21-11-2006 23:25 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Paul
  • Registratie: September 2000
  • Laatst online: 21:36
Ik ben begonnen met AVR microprocessoren, in C, met WinAVR en AVR Studio, beiden gratis. Voor aansturing van een HD44780-compatible kwam ik inderdaad ook bij die Fleury-site uit,

LCDAVR Studio is van Atmel zelf, en bied onderandere een debugger en ondersteuning voor wat programmers (veel programmers zijn compatible met de stanaard Atmel-tools) en JTAG-modules (waar naast de officiele versie ook compatible clonen voor zijn).

Als je handleiding van de LCD-library leest staat daar precies in wat ieder ding doet en welke defines je aan moet passen, in het voorbeeldprogramma staat precies hoe je tekst op het scherm krijgt.

Vanaf scratch iets op het schermpje zetten is, zodra de defines goed staan, letterlijk 3 regels, misschien 2, aan code.

Aan je code te zien wil je echter heel Rome in één dag bouwen. Ik zie structs, lcd-aanroepen etc etc.Zelfs een include naar i2c. Begin simpel, en ga dan steeds meer dingen toevoegen. Ik mis sowieso waar je je gegevens ergens ophaalt, je main loop, de initialisatie etc. Als dat letterlijk je enige code is snap ik wel dat er niet veel zinnigs gebeurt eigenlijk :P

Ook lijkt het me dat een ATmega128 een andere include nodig heeft dan de ATmega48/88/128?

[ Voor 14% gewijzigd door Paul op 22-11-2006 00:32 ]

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 30-11 00:17
Nou ben het helemaal met je eens maar ik krijg de LCD displays die we hier meestal gebruiken niet aan de praat met die code van Fleury, dus pin je er niet op vast.

Het is een kwestie van goed datasheets lezen.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Rowwan
  • Registratie: November 2000
  • Laatst online: 22:01
Weer een code dump zonder eerst vragen van anderen te beantwoorden :X. Nogmaals, heb je enige basiskennis?
Je dumpt weer een code fragment wat niet eens compileert:
Waar is je main routine?
Waar zijn je initializaties van je porten?
Wat is 'spintf'? Is dat hetzelfde als 'sprintf'? Volgens mij missen er nogal wat haakjes...
Pagina: 1