Scheef_schaap
't schaap is de preut af, meestal vooralleer het spel hespe is! (of in het AN: Meestal zal het eerst mislukken voor alleer het lukt..)
Hallo,
Ik zit met iets raars, mijn atmel is goed geprogrammeerd en alles werkt,
enkel zit ik met dergelijk raar probleem:
Als mijn verwarming uitstaat (PORTB.2=0) meet ik bv 29°C. Als deze aanslaat (PORTB.2=1) dan zakt de temperatuur onmiddelijk tot 19°C.
Aan de verwarming zelf ligt het niet, als ik deze afkoppel dan zit ik met hetzelfde probleem.
Ligt dit aan het feit dat PORTB.2 zélf ook een pin is van de AD convertor, en als ik deze op 1 'forceer' dit invloed heeft op de uC?
Aan wat zou dit kunnen liggen?
In bits zakt hij 20 (dus ong. 3 bits fout)
Bedankt!
Als je avr goed geprogrammeerd is en de hardware ook goed is, dan kan dat niet. Ergo of je hardware, of je software klopt niet. Persoonlijk vermoed ik eerder een hardware fout.
Kan je wat laten zien?
Gr
Marianne
Scheef_schaap
't schaap is de preut af, meestal vooralleer het spel hespe is! (of in het AN: Meestal zal het eerst mislukken voor alleer het lukt..)
Uiteraard, komt er aan. Is wel 2,4Mb..
http://users.skynet.be/fa296995/DSCN2119.JPG
http://users.skynet.be/fa296995/DSCN2120.JPG
http://users.skynet.be/fa296995/DSCN2121.JPG
http://users.skynet.be/fa296995/DSCN2122.JPG
Probleem is dus (na testen)
als ik een AD kanaal gebruik als output geeft dit invloed op de gemeten waarde.
gebruik ik een andere poort, bv PORT.5 .. PORTD.7 geeft dit geen invloed.
Alsook loop mijn uC soms vast, en krijg ik allemaal vreemde tekens op het scherm.
Mijn code:
$crystal = 8000000
$regfile = "M8def.dat"
Dim I2ctemp As Byte
Config Scl = Portc.0 'Is serial clock SCL
Config Sda = Portc.1 'Is serial data SDA
Config Portb.1 = Output
Config Portb.2 = Output
Config Portc.3 = Input
Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Lamp Alias Portb.1
Verwarming Alias Portb.2
'*** Config the timer ***
Config Timer1 = Timer , Prescale = 256
' Timer1 is now UP, and an interrupt is only generated
' when the Timer1 register reaches 0
' To get an interrupt every 1000 timer ticks we load the
' TimerStart constant with 65536-1000
Const Timerstart = 65536 - 31250
' Load the TimerStart value into the Timer1 register
Timer1 = Timerstart
' Set the Timer1 interrupt pointer
' The Timer_1_int subroutine is executed when Timer1=0
On Timer1 Timer_1_int
' Enable the use of Timer1
Enable Timer1
' Enable the general use of interrupts
Enable Interrupts
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.3 , Db6 = Portd.2 , Db7 = Portd.1 , E = Portc.5 , Rs = Portc.4
Config Lcdmode = Port
Config Adc = Single , Prescaler = Auto , Reference = Off
Start Adc
Deflcdchar 0 , 2 , 25 , 25 , 1 , 1 , 25 , 25 , 2 ' Replace Print With Number(0 -7) ""
Deflcdchar 1 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32 ' replace ? with number (0-7)
Deflcdchar 2 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ' replace ? with number (0-7)
Cls
Dim W As Word
Dim Temp As Word
Dim Uur As Byte , Minuut As Byte , Seconde As Byte
Dim Teller As Word
Dim Channel As Byte
Dim Tempmsb As Byte
Dim Templsb As Byte
Portd.5 = 0
Portd.6 = 0
Portd.7 = 0
'-------------------------------------------------
Lamp = 0
Verwarming = 0 'Verwarming
' Instellen huidige tijd
'--------------------------------------
Uur = 12 : Minuut = 48 : Seconde = 00
'--------------------------------------
Cursor Off Noblink
' 'I2C initialisatie
' '--------------------
' I2cinit
' I2cstart
' I2cwbyte &H9E
' I2cwbyte &HAC
' I2cwbyte &H0A
' I2cstop
' '--------------------
Do
Home Upper
If Uur < 10 Then
Lcd "0"
End If
Lcd Uur
Lcd ":"
If Minuut < 10 Then
Lcd "0"
End If '
Lcd Minuut
Lcd ":"
If Seconde < 10 Then
Lcd "0"
End If
Lcd Seconde
Lcd ""
Lcd Chr(2)
If Uur >= 6 Then
'Lamp = 1
Lcd "L=1"
Else
Lcd "L=0"
Lamp = 0
End If
Lowerline
W = Getadc(3)
W = W - 597
Temp = W / 2
Lcd "Temp="
Lcd Temp
Lcd Chr(1)
Lcd "C"
Lcd Chr(2)
Lcd "H="
If Temp > 27 Then
Lcd "0"
Verwarming = 0
Else
Lcd "1"
'Verwarming = 1
End If
Waitms 50
Loop
'Subroutine which is called when Timer1=0
Timer_1_int:
Timer1 = Timerstart
Incr Seconde
If Seconde = 60 Then
Incr Minuut
Seconde = 0
Cls
If Minuut = 60 Then
Incr Uur
Minuut = 0
If Uur = 24 Then
Uur = 0
End If
End If
End If
'---------------------------------------
'start convert
'I2cstart
'I2cwbyte &H9E
'I2cwbyte &HEE
'I2cstop
'-------------
'read temperature
'I2cstart
'I2cwbyte &H9E
'I2cwbyte &HAA
'I2cstop
'I2cstart
'I2cwbyte &H9F
'I2crbyte Tempmsb , Ack
'I2crbyte Templsb , Nack
'I2cstop
'If Templsb = 128 Then Templsb = 5 Else Templsb = 0
'----------------------------------------
Return
[Bericht gewijzigd door Henry S. op (4%)]
Ik bedoelde met hardware iets als een schema.
Maar het zit er wel mooi uit hoor 
Aangezien de mega8 het te meten signaal kiest via een multiplexer kan er eigenlijk geen noemenswaardige invloed van de ene op de andere adc ingang. Tenzij de multiplexer tijdens een meting van ingang verandert. (Welke referentie bron voor de adc gebruik je?)
Dus, laat de software eens zien.
Sorry, je vorige bericht kwam tijdens het typen...
[Bericht gewijzigd door Henry S. op (6%)]
Scheef_schaap
't schaap is de preut af, meestal vooralleer het spel hespe is! (of in het AN: Meestal zal het eerst mislukken voor alleer het lukt..)
Met dit te zien zie ik dat ik ze toch niet op een ADC kanaal heb aangesloten.
Ik zal té veel stroom trekken uit de poorten zeker?
[Bericht gewijzigd door Henry S. op (55%)]
Voor beiden: http://www.circuitsonline.net/forum/faq#topickicks
Dat idee kreeg ik ook. Ik denk dat je 5V DC valt als pb2 wordt aangestuurd. Dit zou je even moeten meten. Maar dat is het enige wat ik kan bedenken.
Welke taal gebruik je trouwens, lijkt een beetje op fast-avr. En die libraries zijn ZEER buggy.
Gr.
Marianne
Henry S:
Erh, wat bedoel je, oude topics?
ARh, OK, ik snap um, je moet editten. Sorry
[Bericht gewijzigd door poederdoos op (37%)]
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Door de stroom door het verhittingselement, kan het ook zijn dat je GND pin opgetild wordt t.o.v. de meet-gnd. Let daar ook even op....
Dus zorg dat de stroom door je verwarmingselement direct naar de voeding kan terugvloeien en niet langs de processor hoeft, en aan de andere kant zorg dat er geen stromen door de GND leiding tussen de temp meter en de meet-CPU-analoge GND lopen.
Aan de verwarming zelf ligt het niet, als ik deze afkoppel dan zit ik met hetzelfde probleem.
Uit het eerste bericht sluit dit uit. Dus moet het probleem al bij lage stroom optreden denk ik.
Gr
Marianne
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Wat ik al zeker zou doen, is de interne AVCC-referentie gebruiken. Dan kan je tussen AREF en GND een ontkoppel-c plaatsen. Ook als dit de oorzaak niet is, het zal een stabielere ADC-referentie leveren.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
flipflop
"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
Even helemaal off topic hoor, maar hebben we hier nou voor het eerst een vrouwelijke elektronicus (elektronica?) die daadwerkelijk zinnige antwoorden geeft? (vragenstellers hebben we wel eerder gezien). Misschien toch even een applausje waard toch? 
Scheef_schaap
't schaap is de preut af, meestal vooralleer het spel hespe is! (of in het AN: Meestal zal het eerst mislukken voor alleer het lukt..)
Bedankt mensen!
Het probleem zit inderdaad al in de laagspanning. Door de ledjes te desolderen was m'n probleem al gezakt met 8°C (nog een verschil van 1 à 2°C) Deze laatste 2°C komen wel degelijk door de verwarming zelf, dus ik zal m'n printbaan herleggen.
Heb ondertussen een heel nieuwe print getekend:
@Poederdoos: Leuk om dit te horen 
Toegevoegd:
DS1307 voor het bijhouden van de tijd
I2C protocol
Transistoren voor aansturen LED's / optotriac
Weet iemand opmerkingen/verbeteringen?
Alsook: die 2°C spanning die daalt, zal deze nog altijd zo zijn? Beter Avcc ook ontkoppelen?
Heeft die DS1307 aanloopcondensatoren nodig? Soms vind ik ze in schema's op het internet, soms niet.
Het probleem zit inderdaad al in de laagspanning. Door de ledjes te desolderen was m'n probleem al gezakt met 8°C (nog een verschil van 1 à 2°C) Deze laatste 2°C komen wel degelijk door de verwarming zelf
Aha, dan zitten we in de goede hoek.
Heeft die DS1307 aanloopcondensatoren nodig?
Als je wilt dat ie rondjes gaat draaien wel
Aanloop condensatoren worden in motoren gebruikt, ik denk dat je ontkoppel condensator bedoelt, dit is niet nodig in jou geval (maar het mag wel) Of je bedoelt die condensatoren om het kristal naar GND. Nee volgens de datasheet niet.
De plaatjes van je print ontwerp zijn net wat te klein om de details te kunnen zien. Maar een goede regel in dit geval zou zijn om de GND van plug waar je sensor op aangesloten zit zo direct mogelijk met de GND van de controller te verbinden. Als ik me goed herinner wordt AREF intern met een switch met AVCC (of een ref spanning) verbonden. Dus een C tussen AREF en GND is handig.
Kan je nog zeggen welke temp sensor je gebruikt?
Gr
Marianne
Op 21 juni 2010 09:07:53 schreef Scheef_schaap:
Bedankt mensen!
Weet iemand opmerkingen/verbeteringen?
-Connector op de plaats van een steuntje van het display
-Displaysteunen dwars door sporen heen, kijk uit, displayprint kan gaten aan de massa hebben.
-Geen montagegaten...
Scheef_schaap
't schaap is de preut af, meestal vooralleer het spel hespe is! (of in het AN: Meestal zal het eerst mislukken voor alleer het lukt..)
Op 21 juni 2010 10:09:28 schreef poederdoos:
[...]Aha, dan zitten we in de goede hoek.
[...]
Als je wilt dat ie rondjes gaat draaien wel
Aanloop condensatoren worden in motoren gebruikt,
ik denk dat je ontkoppel condensator bedoelt, dit is niet nodig in jou geval (maar het mag wel)Of je bedoelt die condensatoren om het kristal naar GND. Nee volgens de datasheet niet.De plaatjes van je print ontwerp zijn net wat te klein om de details te kunnen zien. Maar een goede regel in dit geval zou zijn om de GND van plug waar je sensor op aangesloten zit zo direct mogelijk met de GND van de controller te verbinden. Als ik me goed herinner wordt AREF intern met een switch met AVCC (of een ref spanning) verbonden. Dus een C tussen AREF en GND is handig.
Kan je nog zeggen welke temp sensor je gebruikt?
Gr
Marianne
Op dit moment gebruik ik een LM335, maar deze wil ik vervangen door en DS1621 die via I2C werkt, en dus minder handmatige calibratie nodig heeft, alsook minder storing. Op het display sluit ik enkel flatcable aan, die gaten negeer ik dus.
Montage gaten voor de print zelf heb ik toegevoegd, bedankt.
Nu maar hopen dat dick best die DS1621 wil bestellen, zou anders niet weten waar ik deze kan krijgen..
Als je een DS1621 (of misschien beter een DS18B20) gaat gebruiken, of een andere sensor die digitaal de temperatuur doorgeeft ben je natuurlijk van alle problemen af.
Het probleem in je huidige ontwerp is dat kleine spanningsverschillen bij een sensor die 10mV/K als gevoeligheid heeft, veel uitmaken.
Dus kan je dan je print zo laten als hij was, alleen een andere (digitale) sensor op de connector aansluiten en je software aanpassen.
Gr
Marianne
flipflop
"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
TS, heb je al gemeten? Als alleen het aanschakelen van een paar LEDs al zoveel vershil in je A/D meting geeft, dan zit er iets erg fout. Dat moet met een voltmeter te meten zijn. "Meten is weten", jawel, daar is ie weer!
Dus niet als een kip zonder kop dingen aanpassen, maar meten!