Hallo, ich habe folgendes problem auf der Seite Coolcircuits habe ich die Datein für einen 3-Digit Voltmeter mir runtergeladen die schaltung habe ich bereits gebaut es fehlt nur noch der PIC jedoch bekomme ich es nicht hin die beiden datein in die Assembler sprache zuwandeln. Habe schon sich programme ausprobiert und bin mit meinen latein am ende. Bitte hilft mir so das ich die datein mit Mplab comilieren kann und Build suceeded ist. Bitte Bitte. Ps: Ich möchte weder den PIC ändern noch das programm selbsst schreiben da ich nicht so viel mit den programmieren kann. Ich hoffe auf eure unterstützing.
Mark tow schrieb: > jedoch bekomme ich es nicht > hin die beiden datein in die Assembler sprache zuwandeln. Wozu auch? Die Hex-Datei enthält das fertig übersetzte Programm, das musst Du nur noch mit einem geeigneten Programmiergerät in den PIC reinbekommen.
Wobei ich mich frage wie eine 2.4 kb große C Datei, ein 3.6 kb großes HEX File ergeben können ??? Das muss mir mal einer erklären... gruß jonas
jonas biensack schrieb: > Wobei ich mich frage wie eine 2.4 kb große C Datei, ein 3.6 kb großes > HEX File ergeben können ??? > > Das muss mir mal einer erklären... Das sind alles nur Texte. Weder die Größe des C-Files sagt etwas darüber aus, wie 'groß' oder 'komplex' das C Programm ist, noch besagt die Größe des Hex-Files, dass das brennbare Programm tatsächlich 3600 Bytes umfasst. Beim Hex-File kann man ungefähr über den Daumen erst mal die Hälfte annehmen (weil man ja für jedes Byte in Hex-Schreibweise 2 Buchstaben braucht) und vom Rest dann noch etwas abziehen, weil da ja auch Steuerinformation drinnen ist. Das eigentlich Binärprogramm wird also irgendwas in der Größenordnung von vielleicht 1kb haben. Und zum Thema C wenn du schreibst int main() { int a, b, c; a = 5; b = 8; c = a * b; ... } dann hast du zwar wenig C-Code, aber irgendwer muss ja auch die 16 Bit Multiplikation implementieren, die der Prozessor nicht vion alleine kann.
Und noch heftiger wirds bei > int main() > { > float a, b, c; > > a = 5; > b = 8; > c = a * b; > > ... > } Dann wird das resultierende Programm gleich deutlich größer, obwohl der Quelltext nur zwei Zeichen länger wurde.
Ja ich weiß das ich nur das Hex file brauch jedoch möchte ich den sehr gerne als assembller noch einmal sehen um ihn evtl. zu verstehen. Hinzu kommt noch das mir nur der MPlab IDE v.8.70 zu verfügung steht. Und der mir im moment nur probleme mit der Hex datei beim Builden macht.
Ach ja und hier ist noch einmal die Seite woher ich die Daten habe. http://www.coolcircuit.com/project/meter/index.html
Mark tow schrieb: > Und der mir im moment nur probleme mit der Hex datei beim Builden macht. Wenn du noch sagst welche Fehler kommen, dann kann man dir auch helfen. Hast du denn die Linkerscripte und Includes in MPLAB gelinkt. Hast du den C18 Compiler überhaupts runtergeladen? Der ist nicht bei MPLAB dabei !
Also ich habe den PIC C Compiler installiert und wenn ich mit MPlab nun die C-Datei builden will schreibt der mir das: Clean: Deleting intermediary and output files. Clean: Deleted file "C:\Users\Baka\Desktop\Neu\Test.mcs". Clean: Done. Executing: "C:\Program Files (x86)\PICC\Ccsc.exe" +FM "..\..\Downloads\meter\main.c" #__DEBUG=1 +ICD +DF +LN +T +A +M +Z +Y=9 +EA #__16F676=TRUE *** Error 74 "main.c" Line 117(1,2): Not enough RAM for all variables 1 Errors, 0 Warnings. Halting build on first failure as requested. BUILD FAILED: Sat Jun 11 11:53:15 2011
Dazu der Text: #include <16F676.h> #device adc=10 #fuses INTRC_IO,NOWDT,PUT,NOPROTECT,BROWNOUT,NOMCLR #use delay (clock=4000000) // 4MHz clock #rom 0x3ff={0x3444} #byte PORTA = 0x05 #byte PORTC = 0x07 #byte TRISA = 0x85 #byte TRISC = 0x87 #define SPORTA PORTA #define SPORTC PORTC #define TICKS_BETWEEN_INTERRUPTS 5000 //5000 #define INTERRUPT_OVERHEAD 35 #define TMR1RESET (0xFFFF-(TICKS_BETWEEN_INTERRUPTS-INTERRUPT_OVERHEAD)) const char SegCode[11] = {0x40,0x57,0x22,0x06,0x15,0x0C,0x08,0x56,0x00,0x04,0xFF}; // 0 1 2 3 4 5 6 7 8 9 const char Column[3] = {0x02,0x01,0x04}; static char Segment[3] = {0x7f,0x7f,0x7f}; static unsigned char ColCount=0x00; void CPU_SETUP(void); void Display(void); void HTO7S(unsigned int32 Num); byte i; unsigned int32 result; #INT_TIMER1 void Timer1(void) { set_timer1(TMR1RESET); Display(); } void main() { unsigned char i; CPU_SETUP(); while(true) { result=0; for (i=0;i<20;i++) { set_adc_channel(3); delay_ms(1); result=result+read_adc(); } //result = 0x3fe; HTO7S(result/20); delay_ms(200); } } void CPU_SETUP() { setup_comparator(NC_NC_NC_NC); // not use comparator module setup_adc_ports( sAN3 | VSS_VDD); setup_adc(ADC_CLOCK_DIV_64); TRISA=0b00011000; PORTA=0x27; TRISC=0b00000000; PORTC=0x37; setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); set_timer1(TMR1RESET); enable_interrupts(GLOBAL); enable_interrupts(INT_TIMER1); } //------------------------------------- // Display routine //------------------------------------- void Display() { PORTA = 0b00100111; // off all digits column and Segment G PORTC = 0b00111111; // off segment a-f delay_cycles(2); if (ColCount>=3) ColCount=0; SPORTC = Segment[ColCount]; SPORTA = ((Segment[ColCount] & 0b01000000)>>1) | (Column[ColCount]^0x07); ColCount++; } //-------------------------------------- // Convet HEX 2 byte to 7-Segment code //-------------------------------------- void HTO7S(unsigned int32 Num) { unsigned int32 res; Segment[0]=SegCode[30*Num/10230]; if (Segment[0]==0x40) Segment[0]=0xFF; res = 30*Num%10230; Segment[1]=SegCode[10*res/10230]; res=10*res%10230; Segment[2]=SegCode[10*res/10230];
Mark tow schrieb: > *** Error 74 "main.c" Line 117(1,2): Not enough RAM for all variables Ich würde sagen da sind zu viele Variablen für diesen Pic.Hast du den richtigen chip eingestellt in Mplab?
Der Feher ist irgendwo in Line 117(1,2).Da must du halt rausfinden welche Line ist die 117 und nachsehen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.