Hallo Ihr Bastler;-) Ich hatte vor zwei tagen ein Problem damit, meinen ATMEGA 163 zu programmieren...jetzt klappts (die Kabelbelegung, die unter mikrocontroller.net angegeben war, stimmte nicht mit Ponyprg überein). Hab gestern das LCD-Temperaturprogramm laufen lassen: da ich ein 20x4 Display am AVR-CRTL habe und eine ATMEGA 163 drauf, bin ich um ein paar Modifikationen m´nicht herum gekommen (include mega163.....diplay rows-anzahl....) ABER: die Temperatur wird nur mit -999. °C angezeigt...woher kann das kommen? Muss ich eventuell noch am assemblercode etwas verändern??? Danke für die Hilfe und Grüße aus Stuttgart Björn
Hat nimenad eine Idee, wqarum die Anzeige nur -999. anzeigt???
In den Kopf schauen kann Dir keiner ! Da must Du schon den Code posten, damit jemand was finden kann (z.B. als Dateianhang). Peter
Hier nun noch der CODE: ------------------------------------- #include <mega163.h> #include <delay.h> #include <stdio.h> // 1 Wire Bus functions #asm .equ __w1_port=0x12 .equ __w1_bit=4 #endasm #include <1wire.h> // DS1820 Temperature Sensor functions #include <ds1820.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x15 #endasm #include <lcd.h> // Declare your global variables here void main(void) { // Declare your local variables here char text[16]; // Input/Output Ports initialization // Port A PORTA=0x00; DDRA=0x00; // Port B PORTB=0x00; DDRB=0x00; // Port C PORTC=0x00; DDRC=0x00; // Port D PORTD=0x00; DDRD=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Output Compare // OC0 output: Disconnected TCCR0=0x00; TCNT0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Output Compare // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Output Compare // OC2 output: Disconnected TCCR2=0x00; ASSR=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off GIMSK=0x00; MCUCR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; // 1 Wire Bus initialization w1_init(); // LCD module initialization lcd_init(20); lcd_putsf("Temperaturanzeige"); while (1) { int temp; temp = ds1820_temperature_10(NULL); lcd_gotoxy(0,1); sprintf(text, "Temp:%i.%c \xDFC",temp/10,temp%10+0x30 ); lcd_puts(text); }; } ------------------------------------------
Das ist ja nur das Rahmenprogramm, da passiert ja nichts. Wichtig ist, was in dieser Funktion erfolgt: temp = ds1820_temperature_10(NULL); Da muß es doch eine Doku dazu geben, die Du gründlich durcharbeiten mußt. Ich halte aber nichts davon, solche komplexen Programme blind zu übernehmen. Die Erfolgsaussichten sind eher gering und man lernt dabei auch nichts. Entweder man versucht da erst durchzusteigen oder man schreibt sich anhand des DS1820-Datenblattes seine eigenen Routinen. Peter
hi björn, damit muss es klappen; nächstes mal beispiel besser studieren ;)) #include <mega163.h> #include <stdio.h> #include <ds1820.h> #include <1wire.h> #include <lcd.h> #asm .equ __w1_port=0x12 .equ __w1_bit=4 .equ __lcd_port=0x15 #endasm char text[16]; char rom_codes[9]; //falls du mehrere sens. hast, wird es dann //rom_codes[n,9], wo n deren anzahl ist; void main(void) { w1_init(); w1_search(0xf0,rom_codes); lcd_init(20); lcd_clear(); lcd_putsf("Temp., °C:"); while (1) { int temp; temp = ds1820_temperature_10(&rom_codes[0]); sprintf(text,"%2i.%-u",temp/10,abs(temp%10)); lcd_gotoxy(0,1); lcd_puts(text); }; }
btw, text[16] ist natürlich viel zu breit, text[5] reicht schon
sorry, natürlich muss man noch #include<math.h> dazu schreiben, wegen der abs()-funktion.
Wie es aussieht, ist es anscheinend doch jemandem gelungen, anhand Deines Programmfragments zu erkennen wovon Du eigentlich sprichst. Ich weiß immer noch nicht mehr, als das es um den DS1820 geht. Du kannst in Zukunft ruhig etwas über die verwendete Hardware und Software (Hersteller, Bezeichnung, Link) verlauten lassen. Solche unkonkreten Aussagen, wie "das LCD-Temperaturprogramm" und "am AVR-CRTL" ergeben bei Google nämlich keinen einzigen Treffer. Peter
Das Programm hat auch nicht mehr als Temp., -C: -999.9 auf das Display gebracht:-( Eventuell aufgrund dieser Anzeige einen Tip????
die funktion: ds1820_temperature_10(unsigned char *addr); gibt den wert "-9999" zurück, wenn kein ds1820 gefunden wird; hardware überprüfen!
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.